show databases;
use mysql;
show tables;
DESC 表名;-- describe表名
CREATE DATABASE [IF NOT EXISTS] 数据库名;
use库名create table表名( 字段名 数据类型(长度) 属性, 字段名 数据类型(长度) 属性, ...);
drop database 库名drop table表名; DROP TABLE [ IF EXISTS ] 表名; -- IF EXISTS 为可选,判断是否存在该数据表, -- 如果删除不存在的数据表会抛出错误, -- 加入IF EXISTS后,表不存在不报错
delete from 表名;
select *from 表名;
MySQL支持三种注释方式:
1.从#字符到行尾。
2.从-- 序列到行尾。注意--(双破折号)注释,要求第2个破折号后面至少跟一个空格符(例如空格、tab、换行符等等)。
3.从/*序列到后面的*/序列。多行注释。
主键是用来唯一标识表中记录的,一个或组合的多个字
1.一个表最多一个主键,主键不能为空,不能重复
2.表中可以没有主键,但是通常情况下建议为表设置主键。
1.创建表时添加约束
字段定义时加上关键字PRIMARY KEY
CREATE TABLE xs (#学生表 xs_nolNT(6)NOT NULL PRIMARY KEY,xs_name VARCHAR(12), xs_sex CHAR(2), xs_ageTINYINT(3),xs_dateDATE )CHARSET=UTF8;
2.如何设置主键为自增字段?
指新记录插入表中时自增字段会自动创建值
默认初始值是1,每次插入记录增加1.
方法:
创建表时设置自增
步骤1.列定义时使用AUTO_INCREMENT
CREATE TABLE xs ( #学生表 xs_no INT(6) PRIMARY KEY AUTO_INCREMENT, xs_name VARCHAR(12), xs_sex CHAR(2), xs_age TINYINT(3) , xs_idnum VARCHAR(11) ) CHARSET=UTF8;
步骤2.设置自增起始值(默认1)
ALTER TABLE <表名> AUTO_INCREMENT=开始数字 #例如: ALTER TABLE xs AUTO_INCREMENT=100 #从100开始自增
修改表时设置自增
ALTER TABLE <表名> MODIFY 字段类型 [其他约束] AUTO_INCREMENT; ALTER TABLE xs MODIFY xs_no INT(6) PRIMARY KEY AUTO_INCREMENT #xs_no列是主键列
是表中唯一标识另一个或同一个表记录的,一个或组合的多个字段
外键用来强制引用完整性
“从表”中对应于“主表”的列,在从表中称为外键或者引用键
新建表时加外键:
CONSTRAINT 外键名 FOREIGN KEY(字段名) REFERENCES 主表名(主键名); #例: CONSTRAINT dept1 FOREIGN KEY(deptId) REFERENCES student(id)
修改时加外键:
ALTER TABLE <数据表名> ADD CONSTRAINT <外键名> FOREIGN KEY(<列名>) REFERENCES <主表名> (<列名>); #例: ALTER TABLE tb_emp2 ADD CONSTRAINT fk_dept1 FOREIGN KEY(deptId) REFERENCES student(id);
删除外键约束的语法格式如下所示:
ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>; #例: ALTER TABLE tb_emp2 DROP FOREIGN KEY fk_tb_dept1;
强制字段不接受 NULL 值(强制字段始终包含值)
如果不向字段添加值,就无法插入新记录或者更新记录。
创建表时添加约束(列级约束)
字段定义时加上关键字NOT NULL表示不可以为空
字段定义时加上NULL表示可以为空
CREATE TABLE xs ( #学生表 xs_no INT(6), xs_name VARCHAR(12) NOT NULL, xs_sex CHAR(2), xs_age TINYINT(3), xs_idnum VARCHAR(11) ) CHARSET=UTF8;
INSERT [INTO] 表名 [(列名)] VALUES (值列表);
INSERT INTO comments (cmtId,newsId,cmtContent,cmtDate,cmtIP,cmtAuthor) VALUES (1,1,有深度,2018-12-03,192.168.1.2,张三’);
1: 字段名是可选的,如省略则依次插入所有字段
INSERT INTO comments VALUES (1,1,有深度,2018-12-03,192.168.1.2’);
2: 插入的数据项,要求符合外键约束
3: 值列表和字段名列表一一对应
4: 具有缺省值的列,可以使用DEFAULT(缺省)关键字来代替插入的数值
5: 插入的数据项,要求符合主键约束
INSERT INTO 新表(字段名列表) VALUES(值列表1),(值列表2),……,(值列表n);
INSERT INTO comments (cmtId,newsId,cmtContent,cmtDate,cmtIP,cmtAuthor) VALUES (1,1,有深度,2018-12-03,192.168.1.2, 张三) , (2,1,有深度,2018-12-03,192.168.1.2,张三’);
为避免表结构发生变化引发的错误,建议插入数据时写明具体字段名!
UPDATE 表名 SET 字段1=值1,字段2=值2,…,字段n=值n [WHERE 条件];
UPDATE comments SET cmtContent= 喜欢邓超, cmtDate=2019- 01-01’ WHERE cmtid=1;
1、更新多列数据使用逗号隔开
2、勿忘条件限制,以防有效数据的丢失
DELETE FROM 表名 [WHERE条件];
DELETE FROM comments WHERE cmtId=1;
有主外键关联表,先删外键表数据,再删除主键表数据
SELECT 列名 FROM 表名;
SELECT * FROM comments;-- 查询所有comments表格中数据 SELECT cmtId,cmtDate,cmtAuthor FROM comments;
查询全部列使用*
功能 :给数据列取别名
SELECT cmtId AS 评论编号, cmtAuthor AS 评论者名称 FROM comments;
功能 :给表取别名
SELECT com.newsId,cmtAuthor FROM comments AS com ;
功能 :把经计算或总结的结果用另外一个新名称来代替
SELECT cmtId+1 AS 评论编号 FROM comments ;
功能 :查询值1和值2区间的数据,并且包含值1和值2
SELECT * FROM comments WHERE cmtId BETWEEN 1 AND 10;
模糊查询是使用SQL 通配符替代一个或多个字符的条件查询
一类字符,代替一个或多个真正的字符,与LIKE关键字一起使用
SELECT * FROM 表名 WHERE 字段 like ‘包含通配符的值’;
SELECT * FROM comments WHERE cmtAuthor LIKE %东%’; -- 如何查询’张’某的新闻评论信息? SELECT * FROM comments WHERE cmtAuthor LIKE ‘张_’;
SELECT DISTINCT 字段名1, 字段名2... FROM 表名
SELECT DISTINCT cmtContent FROM comments
SELECT<字段名列表>FROM<表名> [WHERE<查询条件>] [ORDER BY<排序的列名>[ASC或DESC] DESC表示按倒序排序(即:从大到小排序) ---降序排列 ACS表示按正序排序(即:从小到大排序)---升序排列
SELECT * FROM comments ORDER BY newsId,cmtId DESC;
默认不写是升序排列
SELECT<字段名列表>FROM<表名> [WHERE<查询条件>] [ORDERBY<排序的列名>[ASC或DESC]] [LIMIT[位置偏移量,]行数];
SELECT * FROM comments LIMIT 2,5; -- 查询从第三行开始接下来五条数据
区别空字符串
只能出现在定义允许为NULL的字段
须使用 IS NULL 或 IS NOT NULL 比较操作符去比较
SELECT * FROM comments WHERE cmtAuthor IS NULL;
聚合函数是可以对一组值进行计算,并返回单个值的函数
SELECT 聚合函数 FROM 表名;
SELECT COUNT(*) AS 总数 FROM comments;
是按照指定的字段分类汇总结果的查询方式
SELECT<字段名列表>FROM<表名> [WHERE<查询条件>] [GROUP BY<分组的字段名> [ORDER BY<排序的列名>[ASC或DESC]] [LIMIT[位置偏移量,]行数];
SELECT newsId 新闻编号,COUNT(*) AS 数量 FROM comments GROUP BY newsId;
SELECT列表中只能包含: 1、被分组的列 2、为每个分组返回一个值的表达式,如聚合函数
分组后条件筛选
SELECT<字段名列表>FROM<表名>[WHERE<查询条件>] [GROUP BY<分组的字段名>]HAVING条件 [ORDERBY<排序的列名>[ASC或DESC]][LIMIT[位置偏移量,]行数];
SELECT newsId 新闻编号,COUNT(*) AS 数量 FROM comments GROUP BY newsId HAVING COUNT(*)<5;