赞
踩
- #查看数据库中的所有库
-
- show databases;
方式一:
- use 数据库名;
- show tables;
方式二:
- # 格式 show tables from 库名
-
- show tables from mysql;
- describe [数据库名.] 表名;
-
- 可缩写成: desc [数据库名.]表名;
由于屏幕占比问题与字段数量问题,会导致有些表结构的效果呈现并不好。(默认查看为横向的查看 )
纵向查看方式:
desc 表名\G;
字段名称理解:
Field | 字段名称 |
Type | 数据类型 |
Null | 是否允许为空 |
Key | 主键 |
Default | 默认值 |
Extra | 扩展属性 |
int(n) | 4个字节(32个比特位),整数型,范围(-2147483648~2147483647) |
float(m,d) | 单精度浮点,8位精度,4字节32位。m数字总个数,d小数位 |
double(m,d) | 双精度浮点,16位精度,8字节64位 。m总个数,d小数位 |
char | 固定长度的字符类型 |
varchar | 可变长度的字符类型 |
text | 文本 |
image | 图片 |
decimal(5,2) | 5个有效长度数字,小数点后面有2位(例如123.56) |
bigint(n) | 8个字节,整数型,范围(+-9.22*10的18次方) |
重点了解:char 和 varchar 的区别
值 | CHAR(4) | 存储需求 | VARCHAR(4) | 存储需求 |
---|---|---|---|---|
'' | ' ' | 4个字节 | '' | 1个字节 |
'ab' | 'ab ' | 4个字节 | 'ab ' | 3个字节 |
'abcd' | 'abcd' | 4个字节 | 'abcd' | 5个字节 |
'abcdefgh' | 'abcd' | 4个字节 | 'abcd' | 5个字节 |
CHAR 和 VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
字节大小:
优劣比较:
关系型数据库,都是使用SQL语句来管理数据库中的数据。
SQL,即结构化查询语言(Structured Query Language) 。
SQL语句用于维护管理数据库,包括数据查询、数据更新、访问控制、对象管理等功能。
数据库对象和命名:
数据库的组件(对象):
数据库、表、索引、视图、用户、存储过程、函数、触发器、事件调度器等。
命名规则:
1、DDL:数据定义语言(Data Definition Language),用于创建数据库对象,如库、表、索引等。
例如:CREATE,DROP,ALTER 等。
2、DML:数据操纵语言(Data Manipulation Language),用于对表中的数据进行管理。
例如: SELECT、UPDATE、INSERT、DELETE 等。
3、DQL:数据查询语言( Data Query Languag ),用于从数据表中查找符合条件的数据记录。
例如: SELECT
4、DCL:数据控制语言(Data Control Language),用于设置或者更改数据库用户或角色权限
例如: GRANT,REVOKE
5、TCL:事务控制语言(Transaction Control Language),用于管理数据库中的事务。 TCL经常被用于快速原型开发、脚本编程、GUI和测试等方面。
例如: COMMIT,ROLLBACK,SAVEPOINT
create database study;
- #格式
- CREATE TABLE 表名(字段1 数据类型,字段2 数据类型[,...] [,PRIMARY KEY (主键名)]);
-
- create table class (id int not null,name char(15) not null,score decimal(4,2),passwd char(45) default'',primary key (id));
-
- #解释
- id 字段:这是一个整数类型(int)字段,标记为"not null",表示该字段不允许存储NULL值。同时,它被指定为主键(primary key),这意味着每一行的id字段值必须是唯一的,通常用于唯一标识表中的每一条记录。
-
- name 字段:这是一个固定长度字符类型(char(15))字段,同样不允许存储NULL值。这意味着每个name字段的值必须是一个最多包含15个字符的字符串,若实际输入的字符数少于15个,剩余部分会被填充为空格以达到15个字符的长度。
-
- score 字段:这是一个十进制类型(decimal(4,2))字段,用于存储带小数点的分数。"(4,2)"表示该字段可以存储最大共4位数字,其中包含2位小数,例如0.00到999.99之间的数值。
-
- passwd 字段:这是一个固定长度字符类型(char(45))字段,用于存储密码信息,默认值(default)被设置为空字符串('')。这意味着如果没有为passwd字段提供值,它将自动填充一个空字符串。
-
- 当这条SQL语句被执行后,数据库中将创建一个名为class的表,包含id、name、score和passwd这四个字段。
-
-
-

主键:共同点:字段的值都是唯一的,不允许有重复值。
方式一:指定字段插入数据
- #为指定字段插入值
-
- INSERT INTO 表名(字段1,字段2[,...]) VALUES (字段1的值,字段2的值,...);
- #注意字段的属性not null,则必须为该字段插入值
insert into class (id,name,score,passwd) values(1,'xyl',90,PASSWORD('123'));
如果不加 PASSWORD,直接按照字段顺序插入
- 为所有字段插入值
- insert into 表名 values (所有字段的值);
- #每个字段值用逗号相隔;
- SELECT * FROM 表名; #查询表中所有记录
-
- #按条件查找数据记录,且只显示指定字段的值
- SELECT 字段名1,字段名2[,...] FROM 表名 [WHERE 条件表达式];
-
- #mysql的分页语句:
- select * from 表名 limit 2;
-
- select * from 表名 limit 2,3;
- #显示第2行后的前3行(即显示第3~5行)
修改时:建议指定的条件表达式为主键,主键具有唯一性,避免错改
UPDATE 表名 SET 字段名1=字段值1[,字段名2=字段值2] [WHERE 条件表达式];
DELETE FROM 表名 [WHERE 条件表达式]; #删除一定要加条件,不然会删除整个表
不加条件删
- DROP TABLE 数据库名.表名;
- 或
- USE 库名;
- DROP TABLE 表名;
DROP DATABASE 数据库名;
ALTER TABLE 旧表名 RENAME 新表名
ALTER TABLE 表名 ADD 字段名 数据类型;
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 [数据类型] [约束];
ALTER TABLE 表名 DROP 字段名;
- create table 新表名 like 旧表名;
- #通过LIKE方法,复制旧表的结构生成新表
-
- insert into 新表名 (select * from 旧表名);
- #再将旧表数据导入新表
create table 新表名 (select * from 旧表名);
区别:
第一种 like 的 迁移表 表的结构、属性、约束、数据都有
第二种 备份数据 表的复制内容(数据)
CREATE TEMPORARY TABLE 表名(字段1 数据类型,字段2 数据类型[, ...] [, PRIMARY KEY (主键名)]);
创建方式与创建表完全一致,最大的区别是,临时表只在当前的数据库连接生效,当数据库连接断开或重新连接终端时,该临时表均失效,无法查看,但可以查询到。
- create temporary table class1 (id int(6) zerofill primary key auto_increment,name varchar(20) not null,cardid int(18) not null unique key,hobby varchar(30),haoma int(11));
-
- #解释
- 这条SQL语句用于创建一个临时表class1,临时表只在当前会话期间存在,会话结束后自动删除。临时表的具体结构如下:
-
- id 字段:整数类型(int),设置了宽度为6且自动填充零(zerofill),这意味着即使实际值小于6位数,也会在其前面填充零以使总长度达到6位。同时,该字段被定义为主键(primary key)和自动递增(auto_increment),这意味着每当插入新行时,id字段的值会自动加1,且每一行的id值在整个临时表中必须是唯一的。
-
- name 字段:变长字符串类型(varchar(20)),不允许存储NULL值(not null),最多可存储20个字符长度的字符串。
-
- cardid 字段:整数类型(int),宽度为18,也不允许存储NULL值。该字段还被定义为唯一键(unique key),即在cardid列中的所有值必须独一无二,不可重复。
-
- hobby 字段:变长字符串类型(varchar(30)),可以存储最多30个字符长度的兴趣爱好描述,允许存储NULL值。
-
- haoma 字段:整数类型(int),宽度为11,可以存储不超过11位的整数电话号码,允许存储NULL值。
-
- 执行这条SQL语句后,将在当前数据库会话中创建一个临时表class1,具备上述五个字段和相应的约束条件。

delete from 表名;
truncate table 表名;
两者区别:
(1)delete 清空属于按照行清空,一行一行进行,效率低,速度慢(对于表数据较多的情况) truncate 相当于删除表数据,保留表结构,重新创建一个与原表结构相同的表
(2)当数据表中有自增型约束字段时,delete 清除表数据后,在插入数据时,自增字段的数值会接着被删除表数据的最后一个自增数,计数。(eg:被删除表数据最后一行id(自增),为10,再创建时,该id从11开始)。truncate 清空后,自增型字段会从1开始计数。
drop table table_name
truncate table table_name
delete from table_name
不再需要一张表的时候,用drop
想删除部分数据行时候,用delete,并且带上where子句
保留表而删除所有数据的时候用 truncate
其它比较:
速度
drop> truncate > delete
安全性
delete 最好
主键具有唯一性,不可重复性,不可为空的特点。一般用于删除,查询时条件语句的条件。主键在一张表中只能有一个
该约束针对于整数类型的字段,当插入该字段数据为空时,系统会根据上一个数,自动加1
该约束到字段后,该字段中的数据插入不能为空
该约束添加后,该字段的数据每行均为唯一的,不可重复。唯一性约束可以在一张表中有多个
默认值约束,为该字段设置初始值,如果没有为该字段插入数据,就为初始值
零填充针对整数型的字段,例如int默认为11位,除了填写的数字以外其他用零填充
外键约束,至少将两张表进行关联。我们将这两张表分为主表和从表,主表的主键作为从表的外键。增加数据时,先进行主表操作,如果增加的数据外键值在主表中没有,就要先在主表中添加。
若进行删除操作,就要先进行从表操作,只要将从表有关主表(主键值)全部清除后,才能清除该主表的主键值
明文密码创建用户格式:
- CREATE USER '用户名'@'来源地址' [IDENTIFIED BY [PASSWORD] '密码'];
-
- #解释
- '用户名':指定将创建的用户名.
- '来源地址':指定新创建的用户可在哪些主机上登录,可使用IP地址、网段、主机名的形式,本地用户可用localhost,允许任意主机登录
- 可用通配符%
- '密码':若使用明文密码,直接输入'密码',插入到数据库时由Mysql自动加密;
- 若使用加密密码,需要先使用SELECT PASSWORD('密码');获取密文,再在语句中添PASSWORD '密文';
- 若省略“IDENTIFIED BY"部分,则用户的密码将为空(不建议使用)
加密密码创建用户:
- SELECT PASSWORD('密码'); #先获取加密的密码
-
- CREATE USER 'hyx2'@'localhost' IDENTIFIED BY PASSWORD '加密的密码';
用户信息存放在 mysql
数据库下的 user
表(MySQL 服务下存在一个系统自带的 mysql 数据库)。
去找到用户:
查看用户信息,创建后的用户保存在mysql数据库的user表里
- use mysql;
-
- select user,authentication_string,Host from user;
重命名指定
rename user 'hyx'@'locahost' to 'hyx1'@'localhost'
set password = password('123456');
退出再登录看看
drop user 'hyx1'@'localhost';
set password for 'xhz'@'localhost' = password('123456');
普通用户只有修改自身密码的权限
root用户是超级管理员,它不仅可以修改自身密码,还能修改其他用户的密码。
该操作必须是在数据库本机且为root用户,才可进行
① 修改 /etc/my.cnf 配置文件,免密登录mysql
② 重启数据库服务
③ 无密码登录之后,修改数据库用户中的 root 密码
- update mysql.user SET AUTHENTICATION_STRING = PASSWORD('123') where user='root'
- #用于更新MySQL数据库系统表mysql.user中的用户root的密码。AUTHENTICATION_STRING是MySQL 5.7.0以后版本中用于存储密码的字段名
④ 登录测试新密码
⑤ 撤销添加的免密码认证设置,重启数据库服务
权限 | 权限说明 | 权限级别 |
CREATE | 创建数据库、表或索引的权限 | 数据库、表或索引 |
DROP | 删除数据库或表的权限 | 数据库或表 |
GRANT OPTION | 赋予权限选项 | 数据库或表 |
REFERENCES | 引用权限 | 数据库或表 |
ALTER | 更改表的权限 | 数据表 |
DELETE | 删除表数据的权限 | 数据表 |
INDEX | 操作索引的权限 | 数据表 |
INSERT | 添加表数据的权限 | 数据表 |
SELECT | 查询表数据的权限 | 数据表 |
UPDATE | 更新表数据的权限 | 数据表 |
CREATE VIEW | 创建视图的权限 | 视图 |
SHOW VIEW | 查看视图的权限 | 视图 |
ALTER ROUTINE | 更改存储过程的权限 | 存储过程 |
CREATE ROUTINE | 创建存储过程的权限 | 存储过程 |
EXECUTE | 执行存储过程权限 | 存储过程 |
FILE | 服务器主机文件的访问权限 | 文件管理 |
CREATE TEMPORARY TABLES | 创建临时表的权限 | 服务器管理 |
LOCK TABLES | 锁表的权限 | 服务器管理 |
CREATE USER | 创建用户的权限 | 服务器管理 |
RELOAD | 执行 flush privileges, refresh, reload 等刷新命令的权限 | 服务器管理 |
PROCESS | 查看进程的权限 | 服务器管理 |
REPLICATION CLIENT | 查看主从服务器状态的权限 | 服务器管理 |
REPLICATION SLAVE | 主从复制的权限 | 服务器管理 |
SHOW DATABASES | 查看数据库的权限 | 服务器管理 |
SHUTDOWN | 关闭数据库的权限 | 服务器管理 |
SUPER | 超级权限 | 服务器管理 |
ALL [PRIVILEGES] | 所有权限 | |
USAGE | 没有任何权限 |
- show grants;
- #查看当前用户(自己)的权限
-
- show grants for 'xhz'@'localhost';
-
- #查看其他用户的权限
[NO_AUTO_CREATE_USER
], 即在grant语句中禁止创建空密码的账户,使用grant语法创建用户必须带上 “identified by”关键字设置账户密码,否则就被认为是非法的创建语句。
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'来源地址' [IDENTIFIED BY '密码'];
权限列表: 用于列出授权使用的各种数据库操作,以逗号进行分隔如"select, insert,update"。 使用"all"表示所有权限(实际上部分权限仍无法使用,只包括大部分权限),可授权执行任何操作。
数据库名.表名: 用于指定授权操作的数据库和表的名称,其中可以使用通配符*。 例如,使用"mysql.*" 表示授权操作的对象为mysql数据库中的所有表。 '用户名'@'来源地址': 用于指定用户名称和允许访问的客户机地址,即谁能连接、能从哪里连接。 来源地址可以是域名、IP地址,还可以使用“%”通配符,表示某个区域或网段内的所有地址。
IDENTIFIED BY: 用于设置用户连接数据库时所使用的密码字符串。在新建用户时,若省略"IDENTIFIED BY"部分,则用户的密码将为空。
- grant select,insert on study.class to 'xhz'@'localhost';
-
- show grants for 'xhz'@'localhost';
GRANT ALL PRIVILEGES ON *.* TO '用户名'@'来源地址' IDENTIFIED BY '密码';
revoke 权限列表/ALL on 库名.表名 from '用户名'@'来源地址';
用户授权
grant all privileges on *.* to 'cnm'@'192.168.44.%' identified by '123';
总结:
查看数据库和表:
show databases;
use 库名;
show tables;
desc 表名;
desc 表名\G
show table 表名;
创建及删除数据库和表:
create database 库名;
create table 表名(字段1 数据类型 [属性], 字段2 .....);
DROP TABLE [数据库名.]表名;
DROP DATABASE 数据库名;
表数据的增删改查:
insert into 表名 values (所有字段的值);
insert into 表名 (指定字段名称) values(字段的值);
delete from 表名 [where ...];
update 表名 set 字段=值[, 字段2=....] [where ...];
select 字段1[,字段2....] from 表名 [where ...];
select * from 表名;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。