⼀. SQL概述
1.实现数据持久化
2.使用完整的管理系统统一管理
二.数据库的概念
1.DB—数据库(DATABASE):
存储数据的"仓库"。它保存了一系列有组织的数据
2.DBMS— 数据库管理系统(DATABASE MANAGEMENT SYSTEM)
数据库是通过DBMS创建和操作的容易
3.SQL — 结构化查询语言(STRUCTURE QUERY LANGUAGE)
专门用来与数据库通信的语言
三.SQL的优点
1.不是某个特定数据库供应商专有的语言,几乎所有DBMS都支持SQL
2.简单易学
3.虽然简单,但实际上是一种强有力的语言,灵活使用其语言元素,可以进行非常复杂和高级的数据库操作
四.SQL语言的分类
1. DML(DATA MANIPULATION LANGUAGE):
数据操纵语句,⽤于添 加、删除、修改、查询数据库记录,并检查数据完整性。
①
INSERT:
添加数据到数据库中。
②
UPDATE:
修改数据库中的数据。
③
DELETE:
删除数据库中的数据。
④
SELECT:
选择
(
查询
)
数据。
SELECT
是
SQL
语⾔的基础,最为重要。
2. DDL(DATA DEFINITION LANGUAGE):
DDL⽤于定义数据库的结构,⽐如创建、修改或删除数据库对象。
①
CREATE TABLE:
创建数据库表。
②
ALTER TABLE:
更改表结构、添加、删除、修改列⻓度。
③
DROP TABLE:
删除表。
④
CREATE INDEX:
在表上建⽴索引。
⑤
DROP INDEX:
删除索引
3. DCL(DATA CONTROL LANGUAGE):
数据控制语句,⽤于定义⽤ 户的访问权限和安全级别。
①
GRANT
:授予访问权限。
②
REVOKE
:撤销访问权限。
③
COMMIT
:提交事务处理。
④
ROLLBACK
:事务处理回退。
⑤
SAVEPOINT
:设置保存点。
⑥
LOCK
:对数据库的特定部分进⾏锁定
五.启动停⽌mysql服务
1.
通过计算机管理⽅式:
右击计算机
—
管理
—
服务
—
启动或停⽌
MySQL
服务
2.
通过命令⾏⽅式:
启动
:
net start mysql
服务名 停⽌
:
net stop mysql
服务名
3.
登录
MYSQL –H
主机名
–U
⽤户名
–P
密码
例如:
mysql -h127.0.0.1 -uroot -p123456
4.
退出
EXIT
例如:
exit;
注意事项:
① 不区分⼤⼩写。
② 每句话⽤
;
或
\g
结尾。
③ 各⼦句⼀般分⾏写。
④ 关键字不能缩写也不能分⾏。
⑤ ⽤缩进提⾼语句的可读性。
-- 习题:
-- 1.
创建
db
数据库 并设置字符集编码为
utf8mb4
并设置 排序⽅式为区分⼤⼩写。
-- 2.
切换数据为
db
。
-- 3.
创建数据表
stu
设置属性
id
⻓整型 主键 ⾃增;
name
名称 字符型 ⻓度(
50
)不能为空
默认空字符;
-- 4. gender
固定字符 ⻓度
1
不能为空 默认
1
描述:性别
1.
男,
2.
⼥,
3.
保密;
-- 5. create_time
时间戳类型 不能为空 进⾏
insert
的时候,⾃动使⽤当前时间。
-- 6. update_time
时间戳类型 不能为空 进⾏
update
的时候,⾃动使⽤单前时间,进⾏
insert
的时候⾃动使⽤当前时间。
-- 7.
使⽤的数据库引擎为
innodb
默认字符集编码为
utf8mb4
排序⽅式为 不区分⼤⼩写 ,并
设计 ⾃动增⻓的开始值为
1.
-- 8.
完善创建语句,保证数据表在不存在的情况下,进⾏创建,如果数据表存在,删除后新
建。
-- 9.
添加
remark
属性,要求 可变字符串
200
⻓度 不能为空。
-- 10.
修改
remark
的属性为 ⻓度
255
可以为空。
-- 11.
删除
remark
列。
-- 12.
修改
gender
的列名为
sex
类型为
tinyint
⻓度为
2
默认值为
1
,描述不变
-- 13.
使⽤默认⽅式插⼊⼀个条数据
name
为
Michael, sex
为
1
,
id
为
1.
-- 14.
使⽤指定
column
的⽅式⼀次性插⼊
3
条记录,
name
分别为
Lucy
,
Lily, Lin
,其它属性使
⽤默认值。
-- 15.
修改
id
为
3
的这条数据,将性别改为
3
,名称改为
Lingling
。
-- 16.
删除最后⼀条数据,试着使⽤函数
max()
。
六.对数据库的操作
-- 1.
创建简单数据库 公式:
create database
数据库名称;
create database `db`;
-- 2.
创建完整数据库 完整公式:
create database `
数据库名称
` character set
字符集编
码
collate
字符排序规则
;
--
使⽤
utf8mb4
代替
utf8
原因
mysql
中的
utf8
最多只能⽀持
3bytes
⻓度的字符编码,对
于⼀些需要占据
4bytes
的⽂字,
mysql
的
utf8
就不⽀持了,要使⽤
utf8mb4
才⾏。
-- ci
⼤⼩写⽆关
cs
⼤⼩写相关
ai
发⾳⽆关 常⽤:
utf8mb4_bin
⼤⼩写相关 国内常
⽤:
utf8mb4_general_ci
建议使⽤:
utf8mb4_unicode_ci
原因:
mysql8
后默认为:
utf8mb4_0900_ai_ci
-- SQL
语句
>
列级别设置
>
表级别设置
>
库级别设置
>
实例级别设置
create database if not exists `db` character set utf8mb4 collate utf8_general_ci;
--
删除数据库 不教
-- 3.
查询所有数据库
show databases;
-- 4.
切换数据库
--
公式
: use `
数据库名称
`
use db;
命名规则:
数据库名不得超过
30
个字符,变量名限制为
29
个。
必须只能包含
A–Z, a–z, 0–9, _
共
63
个字符。
不能在对象名的字符间留空格。
必须不能和⽤户定义的其他对象重名。
必须保证你的字段没有和保留字、数据库系统或常⽤⽅法冲突。
保持字段名和类型的⼀致性
,
在命名字段并为其指定数据类型的时候⼀定要保证⼀致性。假如
数据类型在⼀个表⾥是整数
,
那在另⼀个表⾥可就别变成字符型了。
七.对表的操作
1. CREATE TABLE
语句
必须具备:
①
CREATE TABLE
权限
② 存储空间
公式:
create table [schema.]table
(column datatype [default expr][, …]);
必须指定
:
–
表名
–
列名
,
数据类型
,
尺⼨
# 1. 创建基本数据库
create table stu (
`id` bigint(20) not null comment
主键
ID auto_increment,
`name` varchar(255) not null default '' comment '
名字
',
`gender` char(1) not null default '1' comment '
性别
1.
男,
2.
⼥,
3.
保密
',
`create_time` timestamp not null default current_timestamp comment '
创建时间
',
`update_time` timestamp not null default current_timestamp on update current_timestamp
comment '
修改时间
',
primary key(`id`)
) engine = innodb default character set utf8mb4 collate utf8mb4_unicode_ci auto_increment
= 1;
--
数字类型
(表格)
--
整数
: tinyint
、
smallint
、
mediumint
、
int
、
bigint
-- bigint
相当于
long tinyint
相当于
byte (x)
括号中的值相当于数字的⻓度
--
浮点数
: float
、
double
、
real
、
decimal
--
(
M,D
)
M
相当于总⻓度,
D
相当于⼩数点右侧的位数
-- D<=M<=255,0<=D<=30
,默认
M+D<=15
--
D<=M<=255,0<=D<=30
, 默认
M+D<=6
--
⽇期和时间
: date
、
time
、
datetime
、
timestamp
、
year
-- TIMESTAMP
会根据系统时区进⾏转换,
DATETIME
则不会,都代表时间戳,时间戳也可以
使⽤
bigint
来替代
--
字符串类型
--
字符串
: char
、
varchar
-- char
最⼤⻓度
255
-- varchar(x)
⻓度可以变化但必须给值,
char
默认⻓度为
1
,不可变
--
⽂本
: tinytext
、
text
、
mediumtext
、
longtext
--
超⻓字符
--
⼆进制
(
可⽤来存储图⽚、⾳乐等
): tinyblob
、
blob
、
mediumblob
、
longblob
2. ALTER TABLE 语句
① 查看现有表中的列的设置参数
# 1.
查看当前表的结构
#
说明:查看当前表中所有已经声明的列的类型,⻓度,默认值,是否为空,描述等
#
公式:
desc tablename
;
desc stu;
② 向已有的表中添加列
# 2. 向数据表中加⼊新列
#
说明:使⽤该⽅法不能与当前表中已有的列重名
#
公式:
alter table
表名
add column datatype [default expr][, …]
;
alter table `stu` add `remark` varchar(200) not null comment ‘
备注
';
③ 修改现有表中的列
# 3. 修改⼀个列
#
说明:⼀般来说主要修改列的数据类型
,
尺⼨和默认值
#
公式:
alter table tablename modify (column datatype [default expr][, …]);
alter table `stu` modify `remark` char(255) null comment ‘
备注
';
#
对默认值的修改只影响今后对表的修改
,
已经⽣成的默认值不会发⽣变化
④ 删除现有表中的列
# 4. 删除⼀个列
#
说明:删除当前表中已经存在的列
#
公式:
alter table tablename drop column column;
alter table `stu` drop column `remark`;
⑤ 重命名现有表中的列
# 5. 重命名⼀个列
#
说明:对当前表格中已经存在的列更改其的列名称。
#
公式:
alter table `stu` change old_column new_cloumn datatype;
alter table `stu` change `remark` `remark1` varchar(255) not null default '' comment ‘
备注
';
#
重命名的过程中必须重新制定
datatype
⑥ 删除表
# 6. 删除表
#
说明:
1.
数据和结构都被删除
# 2.
所有正在运⾏的相关事务被提交
# 3.
所有相关索引被删除
# 4. DROP TABLE
语句不能回滚
#
公式:
drop table tablename;
drop table if exists `stu`;
⑦ 清空表
# 7. 清空表
#
说明:
1.
极度危险
,
# 2.
删除表中所有的数据
,
释放表的存储空间
#
3. TRUNCATE
语句不能回滚
#
4.
⾃动
auto_increment
重新⽣成,危险中的危险
#
公式
: truncate tablename
truncate stu;
⑧ 修改表名
# 8. 改变表名
#
说明:
1.
⼀般来讲,对于表的修改最安全的就是修改表名。
# 2.
其它内容不要更改。
#
公式:
alter table old_tablename rename to new_tablename;
alter table stu rename to student;
⼋. 数据库的基本操作:
1. insert 语法:
#
说明:
1.
向创建好的数据库中插⼊⼀条或者多条数据。
# 2.
⾮空字段和主键必须添加。
# 3.
如果设置了
default
可以不⽤对字段进⾏填充。
# 4.
类型和数量要对应匹配。
# 5. values
和
value
之间没有区别。
#
公式:
insert into tablename values (column, ...)
;
#
第⼀种⽅式:默认⽅式添加数据。
#
注意:对应创建表格的多有字段,依次给定对应的值,使⽤默认值的主键字段和⽇期字段可
以使⽤
null
值代替
insert into student value (5, 'Jerry', '1' , '2020-01-01 00:00:00', '2020-01-01 00:00:00', '
备
注
');
#
第⼆种⽅式:指定字段添加数据
#
公式
: insert into tablename (column[,column...]) value (value[, value]);
insert into student (`name`) value ('Michael');
#
⾃学内容
#
第三种⽅式
:
指定字段添加多条数据
#
公式:
insert into tablename (column[, column ...]) value (value[, value...]), (value[, value…]);
insert into student (`name`) value ('Jerry'), ('Tom'), ('Gray');
#
第四种⽅式
:
指定字段通过查询语句添加多条数据
#
公式
: insert into tablename (column[, column])
查询语句
insert into student (`name`) select `name` from student;
2. update 语法:
#
说明:
1.
对表中已有的数据可以进⾏更新操作
# 2.
尽量不要进⾏全表操作。
# 3.
前提当前操作⽤户有
update
当前表的权限
#
公式:
update tablename set column = value [, column = value] where condition;
update student set `name` = 'Michael' where `name` = 'Michael';
update student set `name` = 'Michael', gender = '3' where `name` = ‘Michael1';
3. delete 语法:
#
说明:
1.
删除指定表中的数据。
# 2.
尽量不要全表操作。
# 3.
前提当前操作⽤户有
delete
当前表的权限。
# 4.
删除操作执⾏后,⾃动递增的
id
继续向下递增。
#
公式:
delete from tablename where condition;
delete from student where id = 5;
4. select 基本语法
#
说明:
1. mysql
中的绝对重点。
#
公式:
select * | column[, column] from tablename where condition;
select * from student;