mysql2307笔记

mysql官网下载地址:https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.33-winx64.zip

向日葵远程:https://sunlogin.oray.com/'

mysql -uroot -proot

-u username

-p password

默认的用户名和密码都是root

一、SQL

1、SQL(Structured Query Language)

结构化查询语言,用于访问和处理数据库的标准的计算机语言

2、语法特点

(1)SQL对关键字的大小写不敏感(windows)

(2)SQL语句可以单行或者多行书写,每行以分号结束

(3)SQL注释

sql 复制代码
#单行注释1,#后面没有空格
-- 单行注释2,--后面有空格

/*
多行注释
多行注释
*/

3、数据库系统

DataBase Mangement System

(1)关系型数据库(RDBMS)

①Oracle

②MySQL

③SQL Server

④PostgreSQL

⑤SQLite

(2)非关系数据库(NoSQL)

①Redis

②MongoDB

③Elasticsearch

④Cassandra

⑤Hbase

4、MySQL数据库基本操作-DDL

DDL(Data Definition Language) 数据定义语言,包括:对数据库的常用操作,对表结构的常用操作、修改表结构

(1)对数据库的常用操作

功能 SQL
查看所有的数据库 show databases;
创建数据库 create database [if not exists] mydb1 [charset=utf8]
切换(选择要操作的数据库) use mydb1;
查看当前所在库 select database();
删除数据库 drop database [if exists] mydb1;
修改数据库编码 alter database mydb1 character set utf8

(2)对数据库的常用操作-创建表

创建表格式:

sql 复制代码
create table [if not exists] 表名(
	字段名1 类型[(宽度)] [约束条件] [comment '字段说明'],
	字段名2 类型[(宽度)] [约束条件] [comment '字段说明'],
	字段名3 类型[(宽度)] [约束条件] [comment '字段说明']
) [表的一些设置];

注:

(1)常见的数据类型有:①数值类型;②日期和时间类型;③字符串类型

①数值类型

类型 大小 用涂
TINYINT 1byte 小整数值
INT或INTEGER 4byte 大整数值
DOUBLE 8byte 浮点数值

②字符串类型

类型 大小 用途
CHAR 0-255byte 定长字符串
VARCHAR 0-65535byte 变长字符串

③日期类型

类型 大小(byte) 格式 用途
DATE 3byte YYYY-MM-DD 日期值
DATETIMESTAMP 8byte YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMSTAMP 4byte YYYYMMDD HHMMSS 混合日期和时间值,时间戳
(2)如果是字符串类型,会有宽度的限制,宽度填多少就代表字符串有多长;如果是数值类型(比如INT(1)),1不代表数据的长度,如果插入了大于显示宽度的值,只要该值不超过该类型的取值范围,数值依然显示出来
sql 复制代码
create table emp(
	eid int(1) comment '员工编号',
	ename varchar(1) comment '员工姓名'
);

insert into emp values
(-2147483649,'A'),
(21333,'B');

(3)对表结构的常用操作

功能 SQL
查看当前数据库的所有表名称 show tables;
查看指定某个表的创建语句 show create table 表名;
查看表结构 desc 表名;
删除表 drop table 表名;

(4)对表结构的常用操作-其他操作

①修改表添加列

sql 复制代码
语法格式:

alter table 表名 add 列名 类型(长度) [约束];

②修改列名和类型

sql 复制代码
语法格式:
alter table 表名 change 旧列名 新列名 类型(长度) [约束];

③修改表删除列

sql 复制代码
语法格式:

alter table 表名 drop 列名;

④修改表名

sql 复制代码
语法格式:

rename table 表名 to 新表名;
sql 复制代码
-- 查询emp所有的数据
SELECT * FROM emp;

SHOW DATABASES;

create database if not exists
mydb1;

drop database if exists mysql07;

drop database if exists mydb1;

create database if not exists mysql08;

create table if not exists class
(id int comment '学号',
c_name varchar(20) comment '课程名称');

#创建mydb1数据库
create database if not exists mydb1;

#创建student表
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 '家庭地址'
);

#查看所有的表
show tables;

#查看student表创建语句
show create table student;

#查看student表结构
desc student;

#删除student表
drop table student;

#添加字段dept
alter table student add `dept` varchar(20);

#修改dept字段为department,并设置varchar(30)
alter table student 
change `dept` department varchar(30);

#删除department字段
alter table student drop department;

#将student表名改为stu
rename table student to stu;

#添加字段score DOUBLE
alter table stu add `score` double;

#将stu表名改为student
rename table stu to student;

5、MySQL数据库基本操作-DML

DML是指数据操作语言,Data Manipulation Language,用来对数据库表中数据记录进行更新、删除、插入等操作

关键字:insert(插入)、delete(删除)、update(更新)

(1)数据插入

sql 复制代码
语法格式:
#向表中指定某些列插入数据
insert into 表名(列名1,列名2,列名3...) values (值1,值2,值3...);

#向表中所有列插入数据
insert into 表名 values (值1,值2,值3...);
sql 复制代码
#向student表中sid name gender age 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','上海',88.0);

注:两种格式均可,SQL语句以分号结尾,可以在一条insert语句中同时插入多个列表值,values只需要写一次,括号之间用逗号隔开

sql 复制代码
#向stduent表中所有字段添加多个数据
insert into student
values 
(1003,'张三丰11','男',88,'1918-08-13','北京',90.0),
(1004,'张无忌111111111111111111','男',36,'1983-07-11','北京',83.0);

(2)数据修改

sql 复制代码
语法格式:

update 表名 set 字段名 = 值,字段名=值...;
update 表名 set 字段名 = 值,字段名=值... where 条件;
sql 复制代码
#将所有学生的地址修改为重庆
update student set address = '重庆';

#将sid为1004的学生的地址修改为北京
update student set address = '北京' where sid = 1004;

insert into student values
(1005,'沙师弟','男',33,'1986-03-18','上海',82.5);

#将sid为1005学生的地址修改为北京,成绩修改为100
update student set address = '北京',score = 100 where sid = 1005;
``
### (3)数据删除
```sql
语法格式:
delete from 表名 [where 条件];

truncate table 表名 
或者 
truncate表名
sql 复制代码
#删除sid为1004的学生数据
delete from student where sid = 1004;

#删除表所有数据
delete from student;

insert into student
values 
(1003,'张三丰11','男',88,'1918-08-13','北京',90.0),
(1004,'张无忌1111111111111111','男',36,'1983-07-11','北京',83.0);
#清空表数据
truncate table student;
或者
truncate student;

注:delete和truncate原理不同,delete只删除内容,而truncate类似于drop table,可以理解为将整个表删除,然后再创建该表

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.在定义字段的同时指定主键

sql 复制代码
语法格式:
create table 表名(
	...
	<字段名><数据类型> primary key
	...
)

b.在定义完字段之后指定主键

sql 复制代码
语法格式:
create table 表名(
	...
	[constraint <约束名>] primary key [字段名]
);

③添加多列主键(联合主键)

联合主键:一张表中多个字段组成的

联合主键也是一个主键

sql 复制代码
语法格式:
create table 表名(
	...
	primary key (字段1,字段2,...,字段n)
);
sql 复制代码
实现:
create table emp3(
	name varchar(20) comment '姓名',
	dept_id int comment '部门编号',
	salary double comment '薪资',
	primary key (name,dept_id)
);

delete from emp3;

insert into emp3 values
('111',10,5000),
('112',10,6000),
('113',10,7000),
('111',20,8000),
('112',30,9000);

多个键作为主键时其中的值不能完全相同,允许其中几个相同,但是不能出现NULL即空值

④通过修改表结构添加主键

主键约束不仅可以在创建表的同时创建,也可以在修改表时添加

sql 复制代码
语法格式:
create table 表名(
	...
);
alter table <表名> add primary key(字段列表);
sql 复制代码
实现:
create table emp4(
	eid int,
	name varchar(20),
	dept_id int,
	salary double
);

#给emp4表添加主键
alter table emp4 add primary key (eid);

⑤删除主键

sql 复制代码
格式:
alter table <数据表名> drop primary key;
sql 复制代码
实现:
#删除emp1表中主键
alter table emp1 drop primary key;

#删除emp3表中的联合主键
alter table emp3 drop primary key;
sql 复制代码
#主键实现
create table emp1 (
	eid int primary key comment '编号',
	name varchar(20) comment '姓名',
	dept_id int comment '部门编号', 
	slary double
)

insert into emp1 values 
(1001,'张三','5003',3000.0);

insert into emp1 values
(1002,'张三丰','4002',5000.0);

create table emp2(
	eid INT comment '编号',
	name varchar(20) comment '姓名',
	deptId INT comment '部门编号',
	salary double comment '薪资',
	constraint pk1 primary key(eid)
);

insert into emp2 values
(1001,'张安',10,6000);

insert into emp2 values
(1002,'杰森',40,6000);

(2)自增长约束

自增长约束,当字段设置为自增长约束后,在插入数据时,不需要用户输入数据,而由数据库系统根据定义自动赋值,每增加一条记录,该字段会以相同的步长进行增长,一般是放在主键上

sql 复制代码
语法格式:
字段名 数据类型 auto_increment
sql 复制代码
#创建madb1数据库
create database if not exists madb1 charset = utf8;

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
('李四');

①特点

a. auto_increment的初始值是1,每新增一条记录,字段值自动加1

b. 一个表中只能有一个字段使用auto_incremen

c. auto_increment约束的字段必须具备NOT NULL属性

d. 支持的类型(TINYINT、SMALLINT、INT、BIGINT)等

e. 如果最大值达到上限,auto_increment就会失效

②指定自增字段的初始值

sql 复制代码
方式1,创建表时指定
语法格式:
create table 表名(
	... primary key auto_increment,
	...
) auto_increment=10;
sql 复制代码
方式2,创建表之后指定
语法格式:
create table 表名(
	... primary key auto_increment,
	...
);
alter table 表名 auto_increment = 值;
sql 复制代码
#指定自增字段的初始值-方式1
create table t_user2(
	id int primary key auto_increment,
	name varchar(20)
) auto_increment=100;

insert into t_user2 VALUES
(NULL,'aaa'),
(NULL,'aab');

#指定自增字段的初始值-方式2
create table t_user3(
	id int primary key auto_increment,
	name varchar(20)
);

alter table t_user3 auto_increment = 2147483646;

insert into t_user3 values 
(NULL,'aac'),
(NULL,'aad');

insert into t_user3 values
(NULL,'aae');

③delete和truncate区别

delete数据之后自动增长从断点开始

truncate数据之后自动增长从默认起始值开始

sql 复制代码
#auto_increment delete和truncate区别
#delete操作
truncate t_user3;

insert into t_user3 values 
(NULL,'aac'),
(NULL,'aad');

delete from t_user3;

insert into t_user3 values 
(NULL,'aae'),
(NULL,'aaf'),
(NULL,'aag');

#truncate操作
truncate t_user3;

insert into t_user3 values 
(NULL,'aac'),
(NULL,'aad');

truncate t_user3;

insert into t_user3 values 
(NULL,'aae'),
(NULL,'aaf'),
(NULL,'aag');

(3)非空约束(not null)

①添加非空约束

sql 复制代码
语法格式:
方式1:<字段名> <数据类型> not null
方式2:alter table 表名 modify 字段 类型 not null;
sql 复制代码
#添加非空约束-方式1
create table t_user6(
	id int,
	name varchar(20) not null,
	address varchar(20) not null
)

#添加非空约束-方式2
create table t_user7 (
	id int,
	name varchar(20),
	address varchar(20)
);

alter table t_user7 modify name varchar(20) not null;
alter table t_user7 modify 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');#可以(字符串:NULL)
insert into t_user6(id,name,address) values(1001,'','');#可以(空串)

单纯的NULL表示空值,加上引号会变成字符串

②删除非空约束

sql 复制代码
语法格式:
alter table 表名 modify 字段名 类型;
sql 复制代码
#删除之前无法添加
insert into t_user7 (id) VALUES
(10);

#删除t_user7表上的非空约束
alter table t_user7 modify name varchar(20);
alter table t_user7 modify address varchar(20);

#删除之后可以添加
insert into t_user7 (id) values (11);

(4)唯一性约束

唯一约束(Unique Key)是指所有记录中字段的值不能重复,添加唯一约束的列可以为NULL

①添加唯一性约束

sql 复制代码
语法:
方式1:<字段名> <数据类型> unique
方式2:alter table 表名 add constraint 约束名 unique(列);
sql 复制代码
#创建表时指定唯一性约束
create table t_user8(
	id int,
	name varchar(20),
	phone_number varchar(20) unique
);

#测试唯一性约束
insert into t_user8 values
(10,'aaa','1311112222');
insert into t_user8 values 
(11,'aab','1311112222');

#NULL和任何值都不相同,NULL!=NULL
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');

②删除唯一性约束

sql 复制代码
语法格式:
alter table <表名> drop index <唯一约束名>
alter table <表名> drop index <列名>
sql 复制代码
create table t_user9(
	id int,
	name varchar(20),
	phone_number varchar(20)
);

#添加唯一性约束-方式2
alter table t_user9 add constraint upn unique(phone_number);

#测试唯一性约束
insert into t_user9 values
(20,'ccc','13211115555'),
(21,'cca','13211115555');

#删除唯一性约束
#如果有约束名,不能用列名来代替约束名
alter table t_user9 drop index phone_number;

alter table t_user9 drop index upn;

#再次测试
insert into t_user9 values
(20,'ccc','13211115555'),
(21,'cca','13211115555');

(5)默认约束

默认值约束用来指定某列的默认值

①添加默认约束

sql 复制代码
语法格式:
方式1:<字段名> <数据类型> default <默认值>;
方式2:alter table 表名 modify 列名 类型 default 默认值
sql 复制代码
#添加默认约束-方式1
create table t_user10(
	id int,
	name varchar(20),
	address varchar(20) default '北京'
)

insert into t_user10 (id,name)
values (10,'aac'),(11,'ace');

②删除默认约束

sql 复制代码
语法格式:
alter table <表名> modify column 字段名 类型 default null;
sql 复制代码
#删除默认约束
alter table t_user10 modify COLUMN
address varchar(20) default null;

insert into t_user10 (id,name)
values (13,'aat');

(6)零填充约束

zero fill:

①插入数据时,当该字段的值长度小于定义的长度时,会在该值的前面补上相应的0

②zerfill默认为int(10)

①添加零填充约束

sql 复制代码
语法格式:
create table 表名(
	字段名1 类型 zero fill,
	...
)

②删除零填充约束

sql 复制代码
语法格式:

alter table 表名 modify 字段名 类型;
sql 复制代码
create table t_user11(
	id INT zerofill,
	name varchar(20)
);

insert into t_user11 VALUES
(31,'aac'),(32,'ddd');

select * from t_user11;

#删除零填充约束
alter table t_user11 modify id int;
相关推荐
alibaba_张无忌29 分钟前
金融学期末速成笔记
笔记·金融
Komorebi.py2 小时前
【Linux】-学习笔记03
linux·笔记·学习
程序员劝退师_2 小时前
Kafka学习笔记
笔记·学习·kafka
小青头4 小时前
numpy学习笔记
笔记·学习·numpy
豆 腐4 小时前
MySQL【四】
android·数据库·笔记·mysql
青椒大仙KI115 小时前
24/11/14 算法笔记<强化学习> 马尔可夫
人工智能·笔记·机器学习
南城夏季5 小时前
蓝领招聘二期笔记
前端·javascript·笔记
昔舍5 小时前
C#笔记(3)
笔记·c#
小小码神Sundayx5 小时前
三、模板与配置(下)
笔记·微信小程序
spy47_5 小时前
JavaEE 重要的API阅读
java·笔记·java-ee·api文档阅读