MySQL 数据库 day-05

DML语言

简介

数据操作语言:
插入:insert
修改:update
删除:delete

一、插入语句

方式一:经典插入

语法:
insert into 表名(列名,…) values(值1…);

SELECT * FROM beauty;

1、插入的值的类型要有列的类型一致或者兼容

INSERT INTO beauty(id,NAME,sex,borndate,phone,photo,boyfriend_id)
VALUES(13,'小昭','女','1979-4-18','599979',NULL,2);

2、不可以为null的列必须插入值,可以为null的列可以不插入值 但列数和值的个数必须一致

INSERT INTO beauty(id,NAME,sex,borndate,phone)
VALUES(14,'孙燕姿','女','1980-8-6','166669845');

3、列的顺序可以调换,但要一一对应

INSERT INTO beauty(sex,NAME,id,borndate,phone)
VALUES('女','朱茵',15,'1978-8-8','44888778');

4、可以省略列名,默认所有列,而且列的顺序和表中列的顺序一致

INSERT INTO beauty
VALUES(16,'貂蝉','女',NULL,'9448885',NULL,NULL);

方式二:

语法:
insert into 表名
set 列名=值,列名=值,…

INSERT INTO beauty
SET	id=17,NAME='金莎',phone='987455';

两种方式比较:

 1、方式一支持插入多行,方式二不支持
INSERT INTO beauty(id,NAME,sex,borndate,phone,photo,boyfriend_id)
VALUES(13,'小昭','女','1979-4-18','795999',NULL,2),
(14,'孙燕姿','女','1999-5-6','599979',NULL,NULL),
(15,'朱茵','女','1989-4-30','99979',NULL,NULL);
2、方式一支持子查询,方式二不支持
INSERT INTO beauty(id,NAME,phone)
SELECT 26,'宋茜','187788';

二、修改语句

1、修改单表的记录 ★
语法:
update 表名
set 列=新值,列=新值,…
where 筛选条件;

2、修改多表的记录
sql92语法:
update 表1 别名,表2 别名
set 列=值,…
where 连接条件
and 筛选条件;

sql99语法:
update 表1 别名
inner|left|right join 表2 别名
on 连接条件
set 列=值,…
where 筛选条件;

1、修改单表记录

案例1:修改beauty表中姓小的女神电话改为13879588

UPDATE beauty SET phone='13879588'
WHERE `name` LIKE '小%';

案例2:修改boys表中的id号为2的名称改为赵云,魅力值改为98

UPDATE boys SET boyname="赵云",usercp=98
WHERE	id=2;

SELECT * FROM boys;

2、修改多表记录

案例1:修改张无忌女朋友的手机号为110

SELECT * FROM beauty;

UPDATE boys bo
INNER JOIN  beauty b ON bo.id=b.boyfriend_id
SET	b.phone='110'
WHERE	bo.boyName='张无忌';

三、删除语句

方式一:delete
语法:
1、单表的删除 ★
delete from 表名 where 删选条件;

2、多表的删除
sql92语法:
delete 表1的别名/表2的别名
from 表1 别名,表1 别名
where 连接条件
and 筛选条件

sql99语法:
delete 表1的别名/表2的表名
from 表1 别名
inner|left|right join 表2 别名 on 连接条件
where 筛选条件;

方式二:truncate

语法:
truncate table 表名;

方式一:delete

1、单表的删除

案例1:删除id号为13的女神信息

DELETE FROM beauty WHERE id='13';
2、多表的删除

案例1:删除张无忌的女朋友的信息

DELETE b
FROM	beauty b

INNER JOIN boys bo ON b.boyfriend_id=bo.id
WHERE	bo.boyName='张无忌';
案例2:删除黄晓明以及他女朋友的信息
DELETE b,bo
FROM	beauty b
INNER JOIN boys bo ON b.boyfriend_id=bo.id
WHERE	bo.boyName='黄晓明';

方式二:truncate 语句

#清空表中所有数据
TRUNCATE TABLE boys;

delete与truncate比较

1、delete可以加where条件,truncate不能加
2、truncate删除,效率高
3、假如要删除的表中有自增长列,如果用delete删除后,再插入数据自增长列的值从断点开始<即删除前的那个点>,
而truncate删除后,再插入数据,自增长列的值从1开始
4、delete删除有返回值,truncate删除无返回值
5、delete删除能回滚,truncate删除不能回滚

DDL语言

简介:

数据定义语言

库和表的管理

一、库的管理
创建、修改、删除
二、表的管理
创建、修改、删除

创建:create
修改:alter
删除:drop

一、库的管理

1、库的创建

语法:
create database (if not exists) 库名;

案例:创建库books

CREATE DATABASE IF NOT EXISTS books;

2、库的修改

#更改字符集

ALTER DATABASE books CHARACTER SET gbk;

3、库的删除

DROP DATABASE IF EXISTS books;

在这里插入代码片

二、表的管理

1、表的创建 ★

语法:
create table 表名(
列名 列的类型[(长度) 约束],
列名 列的类型[(长度) 约束],
列名 列的类型[(长度) 约束],
……
列名 列的类型[(长度) 约束]
)

案例:创建表book

CREATE TABLE book(
	id INT,#编号
	bName VARCHAR(20),#书名
	price DOUBLE,#价格
	authorId INT,#作者编号
	publishDate DATETIME#出版日期
);

DESC book; #查看表

案例:创建表author

CREATE TABLE author(
	id INT,
	au_name VARCHAR(20),
	nation VARCHAR(10)
);


DESC author;

2、表的修改

alter table 表名 add|drop|modify|change column 列名 [列类型 约束];

①修改列名
ALTER TABLE book CHANGE COLUMN publishDate pubDate DATETIME;
②修改列的类型或约束
ALTER TABLE book MODIFY COLUMN pubdate TIMESTAMP;
③添加新列
ALTER TABLE author ADD COLUMN annual DOUBLE;
④删除列
ALTER TABLE author DROP COLUMN annual;
⑤修改表名
ALTER TABLE author RENAME TO book_author;

DESC book;

3、表的删除

DROP TABLE IF EXISTS book_author;

SHOW TABLES;

建库/建表通用的写法:

DROP DATABASE IF EXISTS 旧库名;
CREATE DATABASE 新库名;

DROP TABLE IF EXISTS 旧表名;
CREATE TABLE 表名();

4、表的复制

INSERT INTO author VALUES
(1,'树上春树','日本'),
(2,'莫言','中国'),
(3,'冯唐','中国'),
(4,'金庸','中国');

SELECT * FROM author;

#①仅仅复制表的结构

CREATE TABLE cope LIKE author

#②复制表的结构+数据

CREATE TABLE cope2
SELECT * FROM author;

#③只复制部分数据

CREATE TABLE cope3
SELECT id,au_name
FROM	author
WHERE	nation='中国';

#④仅仅复制某些字段

CREATE TABLE cope4
SELECT id,au_name
FROM	author
WHERE	0;       #不成立所以数据不会复制过去

补充: 数据类型

常见的数据类型

数值型:
    整型
小数:
     定点型
    浮点型
字符型:
    较短的文本:char、varchar
     较长的文本:text、blob(较长的二进制数据)
日期型:

一、整型

分类:
    tinyint、smallint、mediumint、int/integer、bigint
字节   1     2      3       4     8

特点:

①如果不设置无符号则默认无符号,想设置无符号,需添加sunsigned关键字
②如果插入的数值超出了整型的范围,则会警告,插入的值为即为临界值
③如果不设置长度,会有默认的长度,长度代表了显示的最大宽度,
如果不够会用0在左边填充,但必须搭配ZEROFILL使用

#例:

CREATE TABLE tab_int(
	t1 INT,       #默认有符号  
	t2 INT UNSIGNED,   #无符号
	t3 INT(7) ZEROFILL,   #设置长度为7 显示结果用零填充
);

二、小数

1、浮点型
float(M,D)
double(M,D)
2、定点型
dec(M,D)
decimal(M,D)

特点:

①M和D
M:整数部位+小数部位
D:小数部位
如果超出范围 则插入临界值

② M和D可以省略
如果是decimal,则M默认为10,D默认为0
如果是float和double,则会根据插入的数值的精度来决定精度

③定点型的精确的较高,如果要求插入的数值的精度较高如货币运算等则考虑使用

CREATE TABLE tab_floate(
	f1 FLOAT(5,2),
	f2 DOUBLE(5,2),
	f3 DEC(5,2)
);

三、字符型

/
较短的文本:
char
varchar
其他:
binary和varbinary 用于保存较短的而二进制
enum用于保存集合
较长的文本
text
blob(较长的二进制)

特点:

               写法                   M的意思                             特点            空间的耗费	      效率
 char       char(M)         最大的字符数(可以省略,默认为1)          固定长度的字符         比较耗费空间       高
 varchar    varchar(M)           最大的字符数(不可省略)             可变长度的字符         比较节省空间      低

原则:
所选择的类型越简单越好,能保存的数值的类型越小越好

四、日期型

分类:
date 只保存日期
time 只保存时间
year 只保存年

datetime 保存日期+时间
timestamp 保存日期+时间

特点:

                  字节    范围       时区等的影响
     datetime     8      1000-9999	   不受
    t imestamp    4      1970-2038	    受

补充:常见约束

含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性

分类:
NOT NULL :非空,用于保证该字段的值不能为空
如姓名、学号等
DEFAULT:默认,用于保证该字段有默认值
PRIMARY KEY:主键,用于保证该字段的值具有唯一性,且非空
如学号等
UNIQUE:唯一,保证该字段的值具有唯一性,可以为空
如座位号
CHECK:检查约束[Mysql不支持]
比如 年龄0-130、性别只能是男和女
FOREIGN KEY:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值
在从表添加外键约束,用于引用主表中某列的值
如学生表的专业编号、员工表的部门编号、员工表的工种编号

添加约束的时机:
1、创建表时
2、修改表时

约束的添加分类:
列级约束:除了外键约束都支持
表级约束:除了非空、默认,其他的都支持

CREATE TABLE 表名(
字段名 字段类型 列级约束,
字段名 字段类型
表级约束
);

CREATE DATABASE students;
 USE students;
CREATE TABLE major(
	id INT PRIMARY KEY,
	majorName VARCHAR(20)
)

一、创建表时添加约束

1、添加列级约束

CREATE TABLE stuinfo(
	id INT PRIMARY KEY,  #主键
	stuName VARCHAR(20) NOT NULL, #非空
	gender CHAR(1) CHECK(gender='男'OR gender='女'), #检查
	seat INT UNIQUE, #唯一
	age INT DEFAULT 18  #默认
);

2、添加表级约束

语法:在各个字段的最下面
[constraint 约束名] 约束类型(字段名)

主键和唯一的对比:
    唯一性   允许为空     一个表中可以有多少个
主键   √       ×         至多有一个
唯一   √      √          可以有多个

外键的特点:
1、要求在从表设置外键关系
2、从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求
3、主表的关联列必须时一个key(一般时主键或唯一)
4、插入数据时,先插入主表,再插入从表
5、删除数据时,先删除从表,再删除主表

DROP TABLE IF EXISTS stuinfo;
CREATE TABLE stuinfo(
	id INT ,
	stuName VARCHAR(20) ,
	gender CHAR(1) ,
	seat INT ,
	age INT ,
	majorid INT,
	#表级约束
	CONSTRAINT pk PRIMARY KEY(id), #主键
	CONSTRAINT uq UNIQUE(seat),#唯一键
	CONSTRAINT fk CHECK(gender='男'OR gender='女'), #检查
	CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id) #外键
);
DESC stuinfo;
#通用的写法★:
CREATE TABLE IF NOT EXISTS stuinfo(
	id INT PRIMARY KEY,
	stuname VARCHAR(20) NOT NULL ,
	sex CHAR(1),
	age INT DEFAULT 18,
	seat INT UNIQUE,
	majorid INT,
	CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)
);

二、修改表时添加约束

1、添加列级约束
alter table 表名 modify column 字段名 字段类型 新约束;
2、添加表级约束
alter table 表名 add[constraint 约束名] 约束类型(字段名) [外键的引用];

DROP TABLE IF EXISTS stuinfo;
CREATE TABLE stuinfo(
	id INT ,
	stuName VARCHAR(20) ,
	gender CHAR(1) ,
	seat INT ,
	age INT ,
	majorid INT
)

1、添加非空约束

ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NOT NULL;

2、添加默认约束

ALTER TABLE stuinfo ADD COLUMN age INT DEFAULT 18;

3、添加外键约束

ALTER TABLE stuinfo ADD FOREIGN KEY(majorid) REFERENCES major(id);

三、修改表时删除约束

ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) ;
ALTER TABLE stuinfo DROP PRIMARY KEY;  #主键只有一个可以不加名字
ALTER TABLE stuinfo DROP FOREIGN KEY majorid; #删除外键

补充:标识列

简介:

又称自增长列
含义:可以不用手动的插入值,系统提高默认的序列值

特点:
①标识列必须和key搭配
②一个表至多有一个标识列
③标识列的类型只能时数值型
④标识列可以通过set_auto_increment_increment=3;设置步长

一、创建表时设置标识列

CREATE TABLE tab_identity(
	id INT PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR(20)
);
INSERT INTO tab_identity VALUES(NULL,'jogn');  #添加null值,保证列和值的数量一样
INSERT INTO tab_identity(id,NAME) VALUES(NULL,'da');
INSERT INTO tab_identity(NAME) VALUES('lic');   #可以省略id列
SELECT * FROM tab_identity;

SET auto_increment_increment=3;  #设置步长等于3;

二、修改表时设置标识列

ALTER TABLE tab_identity MODIFY COLUMN id INT PRIMARY KEY AUTO_INCREMENT;

三、修改表时删除标识列

ALTER TABLE tab_identity MODIFY COLUMN id INT 
;
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mae_strive

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值