目录
一、数据库基本概念
1.数据(Data)
2.表
3.数据库
4.数据库管理系统(DBMS)
5.数据库系统
二、数据库介绍
1.关系型数据库
2.非关系型数据库
三、SQL语句
查看数据库名及表名
1.DDL(用于管理数据库对象:库 表 索引)
2.DML(用于管理表数据)
3.DQL(用于根据条件查询表数据)
4.DCL(用于设置或更改数据库用户权限)
1.新建用户
2. 查看用户信息
3.重命名用户
4.删除用户
5.修改当前登录用户密码
6.修改其他用户的密码
7. 忘记 root 密码的解决办法
8. 数据库用户授权
四、修改表结构
1.修改表名
2. 增加表字段
3.修改表字段名
4. 删除表中字段
5.扩展:mysql常见约束
五、数据表的高级操作
1.克隆表
2.清空表
3.临时表
4.外键约束
数据库分为 关系型数据库 和 非关系型数据库。
关系型数据库是基于关系模型的数据库
关系模型的数据结构使用简单易懂的二维数据表
每个二维表中:
实体(数据对象),关系,属性三个要素间的关系:
关系型数据库典型代表:
国内数据库代表:RDB(阿里云),高斯(华为),TDBA(腾讯),Occanbase(阿里),人大金仓,达梦。
非关系数据库也被称为NoSQL(Not Only SQL)
存储数据不以关系模型为依赖,不需要固定的表格式
非关系型数据库的优点:
常用的非关系数据库:
常用的数据类型
show databases; #查看数据库名
use 库名 #进入数据库
show tables; #查看表名
show tables from 库名; #查看指定数据库中的表名
show create table 表名;#查看表结构
desc 表名; #查看表结构
create database 库名;
create table 表名 (字段名1 数据类型 [字段属性], 字段名2 数据类型 [字段属性], ...., primay key(字段));
drop table 表名;
drop database 库名;
desc 表名; #查看表中字段
desc 库名.表名
#向表中写入数据
insert into 表名 (字段1, 字段2, ...) values (字段1的值, 字段2的值, ...);
insert into 表名 values (按照字段顺序的所有字段的值);
#更新表中数据
update 表名 set 字段=值, ... where 条件表达式;
#删除表中数据
delete from 表名 where 条件表达式;
#检索表中指定字段的数据
select 字段1,字段2,... from 表名 where 条件表达式;
#检索表中所有数据
select * from 表名
select * from 表名 limit N; 显示表前N行
select * from 表名 limit N,M; 显示从第N行之后的M行记录(不包含第N行)
#新建用户
CREATE USER '用户名'@'来源地址' [IDENTIFIED BY [PASSWORD] '密码'];
'用户名':指定将创建的用户名
'来源地址':指定新创建的用户可在哪些主机上登录,可使用IP地址、网段、主机名的形式,本地用户可用localhost,允许任意主机登录可用通配符%
'密码':若使用明文密码,直接输入'密码',插入到数据库时由Mysql自动加密;
若使用加密密码,需要先使用SELECT PASSWORD('密码'); 获取密文,再在语句中添加 PASSWORD '密文';
若省略“IDENTIFIED BY”部分,则用户的密码将为空(不建议使用)
CREATE USER 'user1'@'localhost' IDENTIFIED BY '123456';
#查看 abc123 的密文
SELECT PASSWORD('abc123');
#创建后的用户保存在 mysql 数据库的 user 表里
USE mysql;
SELECT User,authentication_string,Host from user;
#查看当前登录用户
select user();
rename user 'zhangsan'@'localhost' TO 'lisi'@'localhost';
drop user 'user2'@'%';
set password = password('abc123');
set password for 'user1'@'localhost' = password('abc123');
修改 /etc/my.cnf 配置文件,不使用密码直接登录到 mysql
vim /etc/my.cnf
[mysqld]
skip-grant-tables #添加,使登录mysql不使用授权表
systemctl restart mysqld
mysql #直接登录
使用 update 修改 root 密码,刷新数据库
UPDATE mysql.user SET AUTHENTICATION_STRING = PASSWORD('abc123') where user='root';
FLUSH PRIVILEGES;
quit
mysql -u root -pabc123
注意:最后再把 /etc/my.cnf 配置文件里的 skip-grant-tables 删除,并重启 mysql 服务。
GRANT语句:专门用来设置数据库用户的访问权限。当指定的用户名不存在时,GRANT语句将会创建新的用户;当指定的用户名存在时, GRANT 语句用于修改用户信息。
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'来源地址' [IDENTIFIED BY '密码'];
flush privileges;
#查看权限
SHOW GRANTS FOR 用户名@来源地址;
#撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM 用户名@来源地址;
#USAGE权限只能用于数据库登陆,不能执行任何操作;USAGE权限不能被回收,即 REVOKE 不能删除用户。
alter table 旧表名 rename 新表名;
alter table 表名 add 新字段 数据类型 字段属性;
alter table 表名 change 旧字段名 新字段名 数据类型 字段属性;
alter table 表名 drop 字段名;
use hello;
create table if not exists world (
id int(4) zerofill primary key auto_increment, #指定主键的第二种方式
name varchar(10) not null default '匿名',
cardid int(18) not null unique key,
hobby varchar(50));
if not exists:表示检测要创建的表是否已存在,如果不存在就继续创建
int(4) zerofill:表示若数值不满4位数,则前面用“0”填充,例0001。不加zerofill,int后的值没有意义。int默认的值是2^32-1
auto_increment:表示此字段为自增长字段,即每条记录自动递增1,默认从1开始递增;自增长字段数据不可以重复;自增长字段必须是主键;如添加的记录数据没有指定此字段的值且添加失败也会自动递增一次
unique key:表示此字段唯一键约束,此字段数据不可以重复;一张表中只能有一个主键, 但是一张表中可以有多个唯一键
not null:表示此字段不允许为NULL
#克隆后的新表与源表数据一样,表结构一样
create table 新表 like 源表;
insert into 新表 (select * from 源表);
#克隆后的表与源表数据一样,表结构可能不一样
create table 新表 (select * from 源表);
#一条一条的删除,效率较慢,自增长字段仍然会按照清空前的顺序自增
delete from 表名;
#直接重置表,清空效率快,自增长字段会从1重新开始
truncate table 表名;
#临时表只能在当前会话中有效,且退出当前会话则会失效
create temporary table 表名 (....);
外键的定义:如果同一个属性字段X在表一中是主键,而在表二中不是主键,则字段X称为表二的外键。
主键表和外键表的理解:
注意:与外键关联的主表的字段必须设置为主键。要求从表不能是临时表,主从表的字段具备相同的数据类型、字符长度和约束。
#创建主表 profession
create table profession (pid int(4),proname varchar(50));
#创建从表 student
create table student (id int(4) primary key auto_increment,name varchar(10),age int(3),proid int(4));
#为主表 profession 添加一个主键约束。主键名建议以“PK_”开头。
alter table profession add constraint PK_pid primary key (pid);
constraint:指定外键名称。不设置,系统自动设置
#为从表 student 表添加外键,并将 student 表的 proid 字段和 profession 表的 pid 字段建立外键关联。外键名建议以“FK_”开头。
alter table student add constraint FK_pro foreign key (proid) references profession (pid);
desc student;
插入新的数据记录时,要先主表再从表
删数数据记录时,要先从表再主表,也就是说删除主键表的记录时必须先删除其他与之关联的表中的记录。
#查看和删除外键约束
show create table student;
desc student;
alter table student drop foreign key 外键名;
alter table student drop key 外键名;