10.DML语言
数据操作语言:
插入:insert
修改:update
删除:delete
10.1.插入语句
语法:
方式1:
insert into 表名
(列名 ,列名...)
values(值1 , 值2....)
方式2:
insert into 表名
set 列名 = 值 , 列名 = 值 ...
INSERT INTO beauty
(id , name , sex , boyfriend_id , phone)
VALUES(14 , "zzz" , '女' , 11 , 18852906999),
(15 , "ccc" , '女' , 11 , 18852909989);
*两种方法的比较
方式一:
支持插入多行
insert into boys
values(5 , "xxx" , "222"),
(6 , 'zzz' , 1000);
支持子查询
所以大多数使用第一种
特点:
#1.插入的值得类型要与列的类型一致或兼容
#2.设置不为null的列必须有值 , 可以为null值的插入的方法
不写这个属性 , 或者是置为null
#3.列名要和属性一一对应
#4.列数和值必须一致
#5.可以省略列名 , 默认所有列 , 而且顺序和表中的顺序是完全一致的
10.2.修改语句
修改单表的记录
update 表名
set 列 = 值 , 列 = 值 , ...
where 筛选条件;
案例1:
修改beauty表中zzz的电话号码该成138888888
UPDATE beauty
SET phone = '138888888'
WHERE `name` = 'zzz';
修改多表的记录
sql92
upadate table1 别名 , table2 别名
set.........
where 连接条件
and 筛选条件
sql99
updata table1 别名
inner|left|right join 表2 别名
set..........
案例:
-- 修改张无忌的女朋友的手机号
UPDATE
boys
LEFT JOIN beauty
ON boys.id = beauty.boyfriend_id
SET phone = '110110101'
WHERE boys.boyName = '张无忌';
-- 修改没有男朋友的女神的男朋友编号都为2
UPDATE
beauty
LEFT JOIN boys
ON beauty.boyfriend_id = boys.id
SET boyfriend_id = 2
WHERE boys.id IS NULL;
10.3.删除
单表的删除
delete from table1 where 筛选条件
DELETE FROM beauty
WHERE name in('xxx' , 'zzz' , 'ccc');
#删除表里的内容
truncate table 表名;
delete和truncate的区别
1.delete可以添加where条件 , truncate不可以
2.truncate在删除表的所有内容的时候会比使用delete删除的效率高一点
3.假如表中有自增长列,那么使用delete删除的会从自增长的断点删除,而truncate会从1开始
4.truncate删除的不支持回滚 , delete支持
5.delete删除的具有返回值 , 而truncate没有
多表的删除
11.DDL(数据库定义语言)
库和表的管理
-
库的管理
创建 , 修改 , 删除
-
表的管理
创建,修改,删除
创建:create
修改:alter
删除:drop
11.1.库的管理
-
库的创建:
语法:
create datebase if not exists 库名
-
库的修改
-
尽量不要去修改库名 , 不安全
-
修改库的字符集:
ALTER DATEBASE 库名 CHARACTER SET 字符集
-
-
库的删除:
DROP DATEBASE IF EXISTS 库名
11.2.表的管理
表的创建
-- CREATE TABLE 表名 (
-- 列名 列的类型 【长度 约束】,
-- 列名 列的类型 【长度 约束】,
-- 列名 列的类型 【长度 约束】,
-- 列名 列的类型 【长度 约束】
-- ...);
-- 创建books表
CREATE TABLE if NOT EXISTS books(
id INT ,
bName VARCHAR(20),
author INT ,
publishDate VARCHAR(10)
);
DESC books;
-- 创建author表
CREATE TABLE if NOT EXISTS author(
id INT,
auName VARCHAR(20),
nation VARCHAR(10)
);
DESC author;
表的修改
列名的修改:ALTER TABLE 表名 CHANGE COLUMN 列名 新列明 类型(修改列名的同时可以修改列的类型)
列的类型修改:ALTER TABLE 表名 MODIFY COLUMN 列名 类型
-- 列名的修改
ALTER TABLE books CHANGE COLUMN author authorId VARCHAR(20);
-- 修改列的类型或者是约束
ALTER TABLE books MODIFY publishDate TIMESTAMP;
-- 添加新列
ALTER TABLE books ADD COLUMN type VARCHAR(20);
-- 删除列
ALTER TABLE books DROP COLUMN type;
-- 修改表名
ALTER TABLE books RENAME TO book_list;
表的删除
DROP TABLE IF EXISTS 表名
表的复制
-- 复制表的结构
CREATE TABLE if not EXISTS copy1 LIKE author;
-- 复制表的结构和内容
-- 复制表的时候,也可以复制部分结构
CREATE TABLE IF NOT EXISTS copy2
SELECT * FROM author;
-- 复制表的部分字段,但不复制内容 , 只要设置条件永远不满足,就保证所有的数据不满足
CREATE TABLE IF NOT EXISTS copy2
SELECT id , nation
FROM author
where 1 = 2;
11.3.类型
11.3.1.整型
11.3.2.浮点型和定点类型
1.浮点型
float(M ,D)
double(M,D)
2.定点型
dec(M,D)
decimal(M,D)
3.特点
D:小数点后的位数
M:整数 + 小数点的位数
如果超过M的范围 , 插入临界值
M和D都可以省略
如果是decimal,那么M默认是10 , D默认是0
如果是float或double,会随着插入的数值精度决定
定点型的精度高,要求精度高的选择定点型
11.3.3.字符型
较短的文本:char , varchar
较长的文本:text , blob(较大的二进制)
char和varchar的比较
写法 M的意思 特点 空间耗费 效率
char char(M) 最大字符数(可以省略默认为1) 固定长度的字符 比较耗费 高
varchar varchar(M) 最大字符数 (不可以省略) 可变长度的字符 比较节省 低
Enum类型:枚举类型 , 只能从枚举的数中,选择一个
set类型:set类型一次可以设置多个
11.3.4.日期类型
11.4.常见的约束
一种限制,用于限制表中的数据,为了保证表中的数据的准确性和可靠性
分类(六大约束):
NOT NULL:非空 , 用于保证该字段不能为空 ,如姓名,学号等
DEFAULT:默认,用于保障该字段具有默认值 ,如性别
PRIMARY KEY:主键,保证该字段的唯一性 ,并且非空 ,如id ,至多只能有一个主键
UNIQUE:唯一,保证该字段的唯一性,可以为空,但是只能有一个为空的 , 可以有多个设置为unique
CHECK:检查约束,【mysql中不支持】
FOREIGN KEY:外检 , 用于限制两个表的关系,用于保证该字段的值必须来自主表的关联列的值
添加约束的时机
-
创建表时
-
修改表时
约束的添加分类
-
列级约束
外键约束没有效果
-
表级约束
除了非空,默认,其他都支持
【constraint 约束名】 约束类型(字段名),如果没有设置约束名的话,约束名时该字段
-
修改表时添加约束
列级约束:alter table 表明 modify column 字段 类型 约束条件
表级约束:alter table 表名 add 【contraint 约束名】 字段 约束条件 【外键引用】
CREATE TABLE if not EXISTS major(
id INT PRIMARY KEY,
marName VARCHAR(20)
);
DROP TABLE stuinfo;
CREATE TABLE if NOT EXISTS stuinfo(
id INT PRIMARY KEY,
stuName VARCHAR(20) NOT NULL,
-- CHECK在MySQL中没用,但是在其他的数据库里面可以使用
gender char(1) CHECK (gender = '男' OR gender = '女'),
age INT DEFAULT(18),
seat INT UNIQUE,
majorId INT ,
-- 外键应该添加在表级约束条件里面
CONSTRAINT fk_stuinfo_major FOREIGN KEY (majorId) REFERENCES major(id)
);
外键
-
要求在从表设置外键关系
-
从表的外键列类型要和主表的关联列的类型要求一致或者是兼容
-
主表的关联列必须是一个key(主键或者是唯一)
-
插入数据的时候,应该想插入主表,然后插入从表
-
删除表的时候,应该先删除从表,然后删除主表
修改表时添加约束条件
DROP TABLE stuinfo;
CREATE TABLE if NOT EXISTS stuinfo(
id INT,
stuName VARCHAR(20) ,
-- CHECK在MySQL中没用,但是在其他的数据库里面可以使用
gender char(1) ,
age INT ,
seat INT ,
majorId INT
);
-- 设置主键
ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;
-- 设置NOT NULL
ALTER TABLE stuinfo MODIFY COLUMN stuName VARCHAR(20) NOT NULL;
-- 设置check
ALTER TABLE stuinfo MODIFY COLUMN gender char(1) CHECK(gerder = "男" OR gender = "女");
-- 设置默认值
ALTER TABLE stuinfo MODIFY COLUMN age int DEFAULT(18);
-- 设置unique
ALTER TABLE stuinfo MODIFY COLUMN seat INT unique;
-- 设置外键,应该是为表添加
ALTER TABLE stuinfo ADD FOREIGN KEY (majorId) REFERENCES major(id);
DESC stuinfo
SHOW INDEX FROM stuinfo
修改表时删除约束
-- 取消非空
ALTER TABLE stuinfo MODIFY COLUMN stuName VARCHAR(20) NULL;
-- 删除默认
ALTER TABLE stuinfo MODIFY COLUMN age int ;
-- 删除主键
ALTER TABLE stuinfo DROP PRIMARY KEY;
-- 删除唯一
ALTER TABLE stuinfo DROP INDEX seat ;
-- 删除外键 , 只要删除设置外键的时候取的别名 , 或者是默认的名
ALTER TABLE stuinfo DROP FOREIGN KEY majorId;