DataBase-数据库
mariadb=mysql
https://doc.canglaoshi.org/
一、SQL(Structured Query Language)结构化查询语言
1、用于访问和处理数据库的标准计算机语言
2、语法特点
(1)SQL对关键字的大小写不敏感(windows)
(2)SQL语句可以单行书写,也可以多行书写,每行以分号结束
(3)SQL注释
3、mysql基本操作-ddl
(1)对数据库的常用操作
功能 | SQL |
---|---|
查看所有的数据库 | show databases; |
创建数据库 | create database [if not exists] mydb1[charset = utf8]; |
切换(选择要操作的数据库) | use mydb1; |
查看当前所在库 | select database(); |
删除数据库 | drop database [if exists] mydb1; |
(2)对数据库的常用操作-创建表
创建表格式:
create table [if not exists] 表名 (
字段名1 类型[(宽度)] [约束条件] [comment '字段说明'],
字段名2 类型[(宽度)] [约束条件] [comment '字段说明'],
字段名3 类型[(宽度)] [约束条件] [comment '字段说明']
) [表的一些设置]
注:
(1)常见的数据类型有:①数值类型;②日期和时间类型;③字符串类型;
①数值类型
类型 | 大小 | 用途 |
---|---|---|
TINYINT | 1byte | 小整数值 |
INT或INTEGER | 4byte | 大整数值 |
DOUBLE | 8byte | 浮点数值 |
tinyint范围:[0,255]
int范围:[-2147483648,2147483647]
②字符串类型
类型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255byte | 定长字符串 |
VARCHAR | 0-65535 | 变长字符串 |
③日期类型
类型 | 大小 | 格式 | 用途 |
---|---|---|---|
DATE | 3byte | YYYY-MM-DD | 日期值 |
DATATIMESTAMP | 8byte | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4byte | YYYYMMDDHHMMSS | 混合日期和时间值,时间戳 |
(2)如果是字符串类型,会有宽度的限制,宽度填多少就代表字符串有多长;
如果是数值类型,比如INT(1),1不代表数据的长度,如果插入了大于显示宽度的值,只要不超过该类型的取值范围,数值依然能够显示出来
(3)对表结构的常用操作
功能 | SQL |
---|---|
查看当前数据库的所有表 | show tables; |
查看指定某个表的创建语句 | show create table 表名 |
查看表结构 | desc 表名; |
删除表 | drop table 表名; |
5、mysql数据库基本操作-DML
数据操作语言,用户对数据表中数据记录进行更新、删除、插入等操作
关键字:insert(插入)、delete(删除)、update(更新)
(1)数据插入
语法格式:
#向表中指定某些列插入数据
insert into 表名 (列名1,列名2,列名3...) values (值1,值2,值3...);
#向表中所有列插入数据
insert into 表名 values (值1,值2,值3);
注:插入数据两种格式均可,SQL语句是以分号结尾,可以在一条insert语句中可以同时插入多个列表值,values只需要写一次,括号之间用逗号隔开
(2)数据修改update
语法格式:
#不带条件修改
update 表名 set 字段名 = 值,字段名1 = 值1...;
#带条件的修改
update 表名 set 字段名 = 值,字段名1 = 值1... where 条件;
(3)数据删除
语法格式:
delete from 表名 [where 条件];
truncate table 表名
或者truncate 表名
注:delete和truncate原理不同,delete只删除内容,而truncate则是将表摧毁并重建
6、mysql约束(constraint)
分类:
(1)主键约束(primary key) PK
(2)自增长约束(auto_increment)
(3)非空约束(not null)
(4)唯一性约束(unique)
(5)默认约束(default)
(6)零填充约束(zerofill)
(7)外键约束(foreign key) FK
(1)主键约束
可以加到某个列上,也可以加到多个列上
①概念
a.主键约束相当于唯一约束+非空约束的组合,即主键约束的列不允许重复,也不允许出现空值
b.每个表最多允许一个主键
②添加单列主键
a.在定义字段的同时指定主键
语法格式:
create table 表名(
...
字段名 类型 primary key,
...
)
b.在定义完表字段之后指定主键
语法格式:
create table 表名 (
...,
[constraint 约束名] primary key [字段名]
);
c.添加多列主键(联合主键)
联合主键:一张表中多个字段组成的,也是一个主键
语法格式:
create table 表名 (
...
primary key (字段1,字段2,字段3...)
);
(2)自增长约束
语法格式:
create table 表名 (
...
字段名 类型 auto_increment
);
①特点
a.auto_increment的初始值是1,每自增一条记录,字段值自动加1
b.一个表中只能有一个字段使用auto_increment
c.auto_increment约束的字段必须具备NOT NULL属性
d.支持的类型(TINYINT、SMALLINT、INT、BIGINT)等
e.如果最大值达到上限,auto_increment就会失效
②指定自增字段的初始值
方式1:创建表时指定
语法格式:
create table 表名 (
...primary key auto_increment,
...
) auto_increment = 10;
③delete和truncate区别
delete数据之后自增长从断点处开始
trucnate数据之后自增长从初始值开始
(3)非空约束(not null)
①添加非空约束
语法格式:
方式1:字段名 类型 not null
(4)唯一性约束
①添加唯一性约束
语法格式:
字段名 类型 unique
(5)默认约束
用来指定某列的默认值
①添加默认约束
格式:
字段名 类型 default 默认值;
(6)零填充约束
zero fill
①插入数据时,当该字段的值长度小于定义的长度时,会在该值的前面补上相应的0
②zero fill 默认为INT(10)
①添加零填充约束
语法格式:
creat table 表名 (
字段名1 类型 zero fill,
...
)
7、mysql基本操作-DQL
DQL:Data Query Language,数据查询语言
语法格式:
select
[all | distinct]
<目标列的表达式1> [别名1],
<目标列的表达式2> [别名2]...
from <表名> [别名],<表名1> [别名1]...
[where <条件表达式>]
[group by <列名>]
[having <条件表达式>]
[order by <列名> [asc | desc] ]
[limit <数字或者列表>];
简化版语法
select *|列名
from 表名
where 条件;
(1)运算符
①算术运算符
运算符 | 说明 |
---|---|
+ | 加法 |
- | 减法 |
* | 乘法 |
/或DIV | 除法 |
%或MOD | 取模,求余 |
create database if not exists mydb1;
#创建员工表
create table if not exists emp(
eid int(1) comment '员工编号',
ename varchar(1) comment '员工姓名'
);
insert into emp VALUES
(-2147483648,'A'),
(21333,'B');
select * from emp;
create table computer(
brand char(3),
bid int(2),
product varchar(5)
);
insert into computer values ('华为',10,'中国深圳');
insert into computer values ('惠普',1001,'拉斯维加斯');
insert into computer values ('戴尔',2147483647,'美国');
show tables;
show create table emp;
desc emp;
drop table computer;
create table if not exists student (
sid int comment '学号',
name varchar(20) comment '姓名',
gender varchar(20) comment '性别',
age int comment '年龄',
birth date comment '出生日期',
address varchar(20) comment '家庭地址'
);
#向student表中sid,name,gender,birth字段添加数据
insert into student(sid,name,gender,age,birth)
values
(1001,'张三','男',20,'1994-12-01');
#向student表中所有字段添加数据
insert into student
VALUES
(1002,'赵敏','女',18,'1995-12-03','上海');
#向student表中所有字段添加多个数据
insert into student VALUES
(1003,'张三丰','男',88,'1918-08-13','北京'),
(1004,'张无忌','男',36,'1983-07-11','北京');
truncate student;
create table 表名(
...
字段名 类型 primary key,
...
)
create table emp1(
eid int primary key comment '编号',
name varchar(20) comment '姓名',
dept_id int comment '部门编号',
salary double comment '工资'
);
insert into emp1 VALUES
(60051,'张三丰',5003,5000);
insert into emp1 (name,dept_id,salary) VALUES
('张三',8801,3600);
insert into emp1 VALUES
(60051,'王强',5005,8000.0);
create table 表名 (
...
[constraint 约束名] primary key [字段名]
);
create table emp2 (
eid int comment '编号',
name varchar(20) comment '姓名',
dept_id int comment '员工编号',
salary double comment '薪资',
primary key(eid)
);
insert into emp2 VALUES
(1001,'张安',10,6000),
(1002,'杰森',40,8000);
create table emp3 (
name varchar(20) comment '姓名',
dept_id int comment '部门编号',
salary double comment '薪资',
primary key(name,dept_id)
);
insert into emp3 VALUES
('111',10,5000),
('112',10,6000),
('113',10,7000),
('111',20,8000),
('112',30,9000);
insert into emp3 values
('114',10,5000);
insert into emp3 values
('113',80,6000);
insert into emp3 values
('111',10,10000);
insert into emp3 values
('113',80,20000);
create table 表名 (
...
字段名 类型 auto_increment
);
create table t_user1 (
id int primary key auto_increment,
name varchar(20)
);
insert into t_user1 values
(NULL,'张三');
insert into t_user1 (name) VALUES
('李四');
create table 表名 (
...primary key auto_increment,
...
) auto_increment = 10;
create table t_user2(
id int primary key auto_increment,
name varchar(20)
) auto_increment = 100;
insert into t_user2 values
(NULL,'aaa'),
(NULL,'bbb');
create table t_user3 (
id int primary key auto_increment,
name varchar(20)
) auto_increment = 2147483647;
insert into t_user3 values (NULL,'ade');
insert into t_user3 values (NULL,'ddd');
create table t_user4 (
id int primary key auto_increment,
name varchar(20)
) auto_increment = 10;
insert into t_user4 values
(NULL,'aac'),
(NULL,'add');
delete from t_user4;
insert into t_user4 values
(NULL,'aae'),
(NULL,'aaf'),
(NULL,'aag');
truncate t_user4;
insert into t_user4 values
(NULL,'aac'),
(null,'aad');
create table t_user6 (
id int,
name varchar(20) not null,
address varchar(20) not null
);
insert into t_user6 (id) values (1001);
insert into t_user6 (id,name,address) values (1001,
NULL,NULL);
insert into t_user6 (id,name,address) values (1001,
'NULL','NULL');
insert into t_user6 (id,name,address) values (1001,
'','');
create table t_user8 (
id int,
name varchar(20),
phone_number varchar(20) unique
);
#测试唯一性约束
insert into t_user8 VALUES
(10,'aaa','13111112222');
insert into t_user8 values
(11,'aab','13111112222');
insert into t_user8 VALUES
(12,'aac',NULL);
insert into t_user8 values
(13,'aad',NULL);
insert into t_user8 (id,name)
values (14,'aba');
create table t_user10 (
id int,
name varchar(20),
address varchar(20) default '北京'
);
insert into t_user10 (id,name)
values (10,'aac'),(11,'ace');
create table t_user11(
id INT zerofill,
name varchar(20)
);
insert into t_user11 values
(31,'aac'),(32,'ddd');
create table product (
pid int primary key auto_increment comment '编号',
pname varchar(20) comment '名称',
price double comment '价格',
category_id varchar(20) comment '分类编号'
);
insert into product VALUES
(null,'海尔洗衣机',5000,'c001'),
(null,'美的空调',2000,'c001'),
(null,'格力空调',5000,'c001'),
(null,'九阳电饭煲',5000,'c001'),
(null,'啄木鸟衬衣',300,'c002'),
(null,'恒源祥西裤',800,'c002'),
(null,'花花公子夹克',440,'c002'),
(null,'海澜之家卫衣',180,'c002'),
(null,'兰蔻面霜',300,'c003'),
(null,'雅诗兰黛精华水',200,'c003'),
(null,'香奈儿香水',350,'c003'),
(null,'SK-II神仙水',350,'c003'),
(null,'资生堂粉底液',180,'c003'),
(null,'老北京方便面',18,'c004'),
(null,'良品铺子海带',17,'c004'),
(null,'三只松鼠坚果',88,null);
select 5+2;
select 5-2;
select 5*2;
select 5/2;
select 5 DIV 2;
#大取小,求余数
select 5%2;
select 5 MOD 2;
#小取大,直接得到最小的那个数
select 2%5;
select 2 MOD 5;
#将每件商品的价格加10
select pname,price,price + 10 as new_price from product;
#将所有商品的价格上调10%
select pname,price*1.1 as new_price from product;
select pname,price+price * 0.1 as new_price from product;