一、SQL分类
1.DDL数据定义语言,用来维护存储数据结构,例如:create,drop,alter
2.DML数据操控语言,用来对数据进行操作,例如:insert,delete,update
2.2.DML中又单独分了一个DQL,数据查询语言,代表指令: select
3.DCL数据控制语言,主要负责权限管理和事务 代表指令: grant,revoke,commit
二、DDL
CREATE DATABASE bjsxt01;
USE bjsxt01;
DROP DATABASE bjsxt01;
CREATE TABLE demo01(
username VARCHAR(5),
age int
);
DESC demo01;
SHOW CREATE TABLE demo01;
DROP TABLE demo01;
RENAME TABLE student to stu;
-- 向创建完成的表中添加字段
ALTER TABLE stu ADD addr VARCHAR(20);-- 添加为第一个字段
ALTER TABLE stu ADD addr VARCHAR(20) FIRST;-- 添加到sid的后面
ALTER TABLE stu ADD addr VARCHAR(20) AFTER sid;
ALTER TABLE stu MODIFY addr INT;
ALTER TABLE stu CHANGE addr hobby VARCHAR(20);
ALTER TABLE stu DROP hobby;
TRUNCATE TABLE stu;
三、DML
INSERT INTO stu (sid,sname,sex,createDate,clazz,email)
VALUES(1,'陈','男',"2022-09-03","SJ129","123@qq.com");
SELECT 想要映射的字段名
UPDATE stu SET sex = "女" WHERE sname="陈";
DELETE FROM stu WHERE sid=1;
四、字段类型
(2)常见数据类型:int整型,double浮点型,varchar字符串,date日期类型。
(3)整数类型:MySQL支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。显示宽度并不限制可以在列内保存的值的范围。
整数类型 | 大小 | 表数范围(有符号) | 表数范围(无符号) | 作用 |
---|---|---|---|---|
TINYINT | 1字节 | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2字节 | (-32768,32767) | (0,65535) | 大整数值 |
MEDIUMINT | 3字节 | (-8388608,8388607) | (0,16777215) | 大整数值 |
INT | 4字节 | (-214748364,2147483647) | (0,4294967295) | 大整数值 |
BIGINT | 8字节 | (-9233372036854775808,9223372036854775807) | (0,18446744073709551615) | 极大整数值 |
浮点数类型 | 大小 | 作用 |
---|---|---|
FLOAT(m,d) | 4字节 | 单精度浮点数值, m总个数,d小数位 |
DOUBLE(m,d) | 8字节 | 双精度浮点数值, m总个数,d小数位 |
(5)字符串类型:必须指定长度
1. char长度固定, 即每条数据占用等长字节空间;适合用在身份证号码、手机号码等定长。
2. varchar可变长度,可以设置最大长度, VARCHAR类型能够根据字符串的实际长度来动态改变所占字节的大小,所以在不能明确该字段具体需要多少字符时推荐使用VARCHAR类型,这样可以大大地节约磁盘空间、提高存储效率。
3. CHAR和VARCHAR表示的是字符的个数,而不是字节的个数。
4. text不设置长度, 当不知道属性的最大长度时,适合用text。
按照查询速度: char最快, varchar次之,text最慢。
字符串类型 | 大小 | 描述 |
---|---|---|
CHAR(M) | 0~255字符 | 允许长度0~M个字符的定长字符串 |
VARCHAR(M) | 0~65535字符 | 允许长度0~M个字符的变长字符串 |
TINYTEXT | 0~255字节 | 短文本数据 |
TEXT | 0~65535字节 | 长文本数据 |
MEDIUMTEXT | 0~16777215字节 | 中等长度文本数据 |
LONGTEXT | 0~4294967295字节 | 极大文本数据 |
BLOB(M) | 最大65K | 以二进制存储图片,文件等数据 |
(6)日期和时间类型:
日期时间函数:获取当前时间:now(),sysdate(),curdate()。
TIMESTEMP类型的数据指定方式与DATETIME基本相同,两者不同之处在于以下几点:
(1) 数据的取值范围不同,TIMESTEMP类型的取值范围更小
(2) 如果我们对TIMESTAMP类型的字段没有明确赋值,或是被赋与了NULL值,MySQL会自动将该字段赋值为系统当前的日期与时间
类型 | 格式 | 取值范围 |
---|---|---|
TIME | ‘HH:MM:SS’ | (‘-838:59:59’, ‘838:59:59’) |
DATE | ‘YYYY-MM-DD’ | (‘1000-01-01’, ‘9999-12-31’) |
YEAR | YYYY | (1901, 2155), 0000 |
DATETIME | ‘YYYY-MM-DD HH:MM:SS’ | (‘1000-01-01 00:00:00’, ‘9999-12-31 23:59:59’) |
TIMESTAMP | ‘YYYY-MM-DD HH:MM:SS’ | (‘1970-01-01 00:00:01’ UTC, ‘2038-01-19 03:14:07’ UTC) |
五、约束
约束名 | 关键字 | 作用 |
---|---|---|
主键 | primary key | 不可重复, 不能为空,即唯一 + 非空 |
唯一 | unique | 不可重复 |
非空 | not null | 不能为空 |
默认值 | default | 赋予默认值 |
检查(Mysql8提供) | check | 取值范围 |
外键 | foreign key | 表与表之间的关系 |
(1)主键约束:PRIMARY KEY
特点:非空、唯一、并且一个表中只能有一个主键约束。
-- 方式一
CREATE TABLE stu(
sid int PRIMARY KEY,
sname VARCHAR(10),
age int,
sex CHAR(1)
);-- 方式二
CREATE TABLE stu(
sid int,
sname VARCHAR(10),
age int,
sex CHAR(1),
PRIMARY KEY(sid)
);-- 方式三:ALTER TABLE 表名 add PRIMARY KEY(字段名);
ALTER TABLE stu add PRIMARY KEY(sid);-- 删除主键约束,不会删除唯一约束
ALTER TABLE stu DROP PRIMARY KEY;-- 删除唯一约束
alter table stu modify sid int;
(2)自增:auto_increment
特点:自己添加数据可能出现重复, 我们通常希望在每次插入新记录时, 数据库自动生成主键字段的值。
CREATE TABLE stu(
sid int PRIMARY KEY auto_increment,
sname VARCHAR(10),
age int,
sex CHAR(1)
);
(3)唯一约束:字段名 字段类型 unique
特点:不允许有重复的值,允许有多个空值。
(4)非空约束:字段名 字段类型 not null
特点:不允许出现空值。
(5)默认值:字段名 字段类型 default '值'
特点:不指定该字段时,添加为默认值,注意添加时指定为null默认值失效。
(6)检查约束:
字段名 字段类型 check(字段='值' or 字段='值')
字段名 字段类型 check(字段>n or 字段<m)
字段名 字段类型 check(字段>n and 字段<m)