文章目录
- 一、DML语言(数据操作语言)
- 1.插入语句
- (1)方式一
- (2)方式二
- (3)两种方式比较
- 2.修改语句
- (1)修改单表的记录
- (2)修改多表的记录(补充)
- 3.删除语句
- (1)方式一
- (2)方式二
- (3)方式一与方式二区别(⭐)
- 二、DDL语言
- 1.库的管理
- 2.表的管理
- (1)表的创建
- A.语法
- B.常见的数据类型
- (2)表的修改
- A.用法
- B.约束
- (4)表的删除
- (5)表的复制
- (6)标识列
- 总结
一、DML语言(数据操作语言)
1.插入语句
(1)方式一
语法:insert into 表名 (列名,…) values (值1,…);
注意:
- 插入的值的类型要与列的类型一致或兼容
- 可以为null的列是如和插入值?
- 可以直接添加null
- 把为空那列删掉
案例:
#方式一
INSERT INTO `beauty`(`id`,`name`,`sex`,`borndate`,`phone`,`photo`,`boyfriend_id`)
VALUES (13,'唐艺昕','女','1990-4-23','123456543',NULL,2);
#方式二
INSERT INTO `beauty`(`id`,`name`,`sex`,`borndate`,`phone`,`boyfriend_id`)
VALUES (14,'金星昕','女','1990-4-23','123456543',2);
- 列的顺序可以调换,但值要一一对应
- 列数和值的个数必须一致
- 可以省略列名,默认所有列,而且列的顺序和表中列的顺序一致
(2)方式二
语法:insert into 表名 set 列名=值1,…;(不常用)
案例:
INSERT INTO `beauty` SET id=15,`name`='刘涛',`phone`='999';
(3)两种方式比较
- 方式一支持插入多行,方式二不支持
案例:
#方式一
select into beauty values(16,'杨幂','女','1990-5-23','334324543',NULL,2),(17,'杨紫','女','1993-6-13','112',NULL,2)
- 方式一支持子查询,方式二不支持
案例:
INSERT INTO `beauty`(`id`,`name`,`phone`) SELECT 16,'宋茜','1234567';#是将结果集插入进去
2.修改语句
(1)修改单表的记录
语法:update 表名 set 列名=新值,…,where 筛选条件;
如果不加where筛选条件,所有行都更新了;但如果加id就会报错(Duplicate entry ‘19’ for key ‘PRIMARY’)因为主键的唯一性。
案例:
UPDATE `beauty` SET `name`='杨紫';
注意:
- 新值的类型与列的值的类型一致或兼容
- 字符、日期型要加单引号
- 筛选条件跟查询一致
(2)修改多表的记录(补充)
92语法:update 表1 别名,表2 别名 set 列=新值,列=新值,。。。where 连接条件 and 筛选条件;
99语法:update 表1 别名 inner|left|right join 表2 别名 on 连接条件 set 列=新值,列=新值,。。。where 筛选条件 ;
案例:
#修改张无忌的女朋友的手机号为114
UPDATE boys bo
INNER JOIN `beauty` b
ON bo.`id`=b.`boyfriend_id`
SET b.`phone`='114'
WHERE bo.`boyName`='张无忌';
3.删除语句
(1)方式一
注意:删除就是删除整行!!!
单表的删除的语法:delete from 表名 where 筛选条件;
多表的删除的语法:
- sql92语法:delete 表1的别名,表2的别名 from 表1 别名,表2 别名 where 连接条件 and 筛选条件;
- sql99语法:delete 表1的别名,表2的别名 from 表1 别名 inner|left|right join 表2 别名 on 连接条件 where 筛选条件;
案例:
#删除黄晓明的信息以及她女盆友的信息
DELETE b,bo #删除黄晓明和她女朋友的信息
FROM `beauty` b
INNER JOIN boy bo
ON bo.`id`=b.`boyfriend_id`
WHERE bo.`boyName`='黄晓明';
(2)方式二
- truncate:清空数据
- 语法:truncate table 表名;
(3)方式一与方式二区别(⭐)
注意:面试常考!!!!
- delete 可以加where条件,truncate不能加
- truncate删除,效率高一丢丢
- 假如要删除的表中有自增长列,如果用delete删除后,再插入数据,自增长列的值从断点开始,而truncate删除后,再插入数据,自增长列的值从断1点开始。
- truncate删除没有返回值,delete删除有返回值
- truncate删除不能回滚,delete删除可以回滚
二、DDL语言
1.库的管理
注意:库的操作注意关键字!!!!
- 库的创建(create)
- 语法:create 【if not exists】database 库名;
- 【if not exists】增加容错性
- 库的修改(alter)
- 只能更改库的字符集
- 案例:ALTER DATABASE books CHARACTER SET gbk;
- 库的删除(drop)
- 语法:drop database 库名;
- 案例:DROP DATABASE 【 if exists】books;
2.表的管理
(1)表的创建
A.语法
create table 表名(
列名 列名的类型,
。。。
)
案例
CREATE TABLE book(id INT,bBook VARCHAR(20),price DOUBLE,authorId INT,publishDate DATETIME
);
B.常见的数据类型
- 数值型
- 整型:tinyint(1字节)、smallint(2字节)、mediumint(3字节)、int\integer(4字节)、bigint(8字节)
- 特点:
- 都可以设置无符号和有符号,默认有符号,通过unsigned设置无符号
- 如果超出范围,会报out or range异常,插入临界值
- 长度可以不指定,默认会有一个长度
- 长度代表显示的最大宽度,如果不够则左边用0填充,但需要搭配zerofill,并且默认变为无符号整型
- 特点:
- 小数
- 浮点型:float(M,D),double(M,D)
- 定点型:dec(M,D),decimal(M,D)
- 特点
- M:整数部位+小数部位, D:小数部位(如果超过范围,则插入临界值)
- M和D都可以省略,如果是decimal,则M默认为10,D默认为0;如果是float和double,则会根据插入数值的精度来决定精度
- 定点型的精度较高,如果要求插入数值的精度较高,如货币运算等,则考虑使用
- 整型:tinyint(1字节)、smallint(2字节)、mediumint(3字节)、int\integer(4字节)、bigint(8字节)
无符号和有符号的测试:
- 字符型
-
较短的文本:char(M) (M 最多的字符数)、varchar(M) (M 最多的字符数)
- 两者区别
- 两者区别
-
较长的文本:text、blob(较大的二进制)
-
- 日期型(必须用单引号引起来!!!)
- date:只保存日期
- time:只保存时间
- year:只保存年
- datetime:保存日期+时间
- timestamp:保存日期+时间
- datetime和timestamp区别:
- datetime和timestamp区别:
(2)表的修改
A.用法
比较简单,就用代码写出来!
注意!!!三个修改的关键字不一样!!!!
- 修改列名关键字:change
- 修改列的类型或约束:modify
- 修改表名:rename to
- 添加新列:add
- 删除列:drop
#修改列名
alter table book change column publishdate pubDate datetime;
#column列名(可以省略) publishdate旧列名 pubDate新列名 必须加类型
#修改列的类型或约束
alter table book modify column pubDate timestamp;
#pubDate列名 timestamp改过后的类型
#添加新列
alter table author add column annual double;
#删除列
alter table author drop column annual;
#修改表名
alter table author rename to column book_authors;
#
#
B.约束
不知道约束是什么的小伙伴,可以移步->常见的约束
#添加非空约束(因为表级约束不支持,所以只写列级约束)
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NOT NULL;
#添加默认约束(因为表级约束不支持,所以只写列级约束)
ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18;
#添加主键(列级约束)
ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;
#添加主键(表级约束)
ALTER TABLE stuinfo ADD INT PRIMARY KEY(id);
#添加唯一(列级约束)
ALTER TABLE stuinfo MODIFY COLUMN SET INT UNIQUE;
#添加唯一(表级约束)
ALTER TABLE stuinfo ADD INT UNIQUE(seat);
#添加外键(因为列级约束不支持,所以只写表级约束)
ALTER TABLE stuinfo ADD FOREIGN KEY(majorid) REFERENCES major(id);
(4)表的删除
语法:drop table 表名;
(5)表的复制
- 仅仅复制表的结构(全部结构)
create table copy like author;
- 仅仅复制某些字段
create table copy4 select id,au_name from author where 1=2;
- 复制表的结构+数据
create table copy2 select * from author;
- 只复制部分数据
create table copy3 select id,au_name from author where nation='中国';
- 跨库复制数据
只需要注意from后面那一步!
#将表`departments`中的数据插入新表dept2中
SELECT TABLE dept2
SELECT `department_id`,`department_name`
FROM `myemployees`.`departments`;
(6)标识列
含义:又称为自增长列;可以不用手动的插入列,系统提高默认的序列值。
创建表时设置标识列:
CREATE TABLE stud(id INT PRIMARY KEY AUTO_INCREMENT,`name` VARCHAR(20)
)
- 设置步长,起始值不能通过这种方式设置
SET auto_increment_increment=3;
- 更改起始值,自己手动的设置
INSERT INTO stu VALUES(10,'john');#假如设置10为起始值
INSERT INTO stu VALUES(NULL,'john');#再运行这句,就可以达到效果
修改表时设置标识列:
#修改表时设置标识列,必须在没加数据,没设置标识列之前
ALTER TABLE stu MODIFY COLUMN id PRIMARY KEY AUTO_INCREMENT;#修改表示删除标识列
ALTER TABLE stu MODIFY COLUMN id INT;
总结
这篇文章较重要的就是关键字,删除库,删除数据的关键字不一样,而且表的管理的内容较多,注意看代码!!!