方式一: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删除不能回滚**
========================================================================
数据定义语言
库和表的管理
一、库的管理
创建、修改、删除
二、表的管理
创建、修改、删除
创建: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;