关系型数据库
数据结构:二维表格 库 -> 表 -> 列(字段):用来描述对象的一个属性 -> 行(记录):用来描述一个对象的信息
市面上:MySQL 、Mariadb 、PostgreSQL 、 Oracle(闭源,用于证券、银行行业)、 SQL Server 、DB2
国产:阿里云RDB 华为高斯 腾讯TDBA 阿里oceanbase 人大金仓 达梦
非关系型数据库 key/value结构
缓存型 Redis Memchache
文档型 MangoDB
搜索型 ElasticSearch
时序型 Prometheus
SQL语言分类:
DDL:数据定义语言,用于创建数据库对象,如库、表、索引等
create database 库名;
create table 表名(字段名 数据类型 [字段属性],....); varchar可变长字符 ; char固定字符,不满也按规则大小算 ;字段属性:主键 空 等
show databases; 查看多少库
use 库名;
show tables; 查看表
show tables from 库名;
desc 表名; #查看表的结构,字段,数据类型,属性
drop table 表名;
drop database 库名;
DML:数据操纵语言,用于对表中的数据进行管理,用来插入、删除和修改数据库中的数据
insert into 表名 (字段1,字段2,....) values (顺序对应字段1,2,...);
insert into 表名 values (按照顺序的所有字段的值)
delete from 表名 where 条件表达式; #不跟where删除所有记录
update 表名 set 字段1=值 1,字段2=值2 where 条件表达式;
DQL:数据查询语言,用于从数据表中查找符合条件的数据记录
select 字段1,字段2,... from 表名 where 条件表达式;
select * from 表名; #按顺序查看所有字段
select * from 表名 limit N; #查看表中头N行
select * from 表名 limit 9,11; #查看9之后的11行(10-20行)
select * from 表名 \G 纵向查询,可以不加分号
修改表结构:
修改表名
alter table 旧表名 rename 新表名
增加表字段
alter table 表名 add 新字段 数据类型 字段属性;
修改表字段名
alter table 表名 change 旧字段名 新字段名 数据类型 字段属性 ;
删除字段
alter table 表名 drop 字段;
use xny;
create table if not exists info (
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
#auto_increment:表示此字段为自增长字段,即每条记录自动递增1,默认从1开始递增;自增长字段数据不可以重复;自增长字段必须是主键;
#unique key:表示此字段唯一键约束,此字段数据不可以重复;一张表中只能有一个主键,但是一张表中可以有多个唯一键
#not null:表示此字段不允许为NULL
------------------------------------------------------
DCL:数据控制语言,用于设置或者更改数据库用户或角色权限(数据控制语句,用于控制不通数据段直接的许可和访问级别的语句,这些语句定义了数据库、表、字段、用户的访问权限和安全级别,如COMMIT、ROLLBACK、GRANT、REVOKE)
root@%
用户可以从任何 IP 地址连接到 MySQL 服务器,因为%
符号表示允许从任何 IP 地址连接到服务器。root@localhost
用户只能从 MySQL 服务器本地连接到服务器,因为localhost
表示只允许从本地连接到服务器。
新建用户
CREATE USER '用户名'@'来源地址' [IDENTIFIED BY [PASSWORD] '密码'];
"密码":若使用明文密码,直接输入“密码”,插入到数据库时由Mysql自动加密
#改名
rename user 'lisi'@'localhost' to 'wangwu'@'localhost'
#删除
drop user 'lisi'@'localhost' to 'wangwu'@'localhost'
#修改密码
set password for 'zhangsan'@'lcoalhost'= password('abc123')
#寻找root密码
vim /etc/my.cnf
添加配置项 skip-grant-tables
重启mysql
use mysql
desc user
select user,host,authentication_string from user;
update user set authentication_string=password('abc123') where user='root' and host='localhost';
flush privileges;
删除配置项 my.cnf 中的skip-grant-tables
------------------数据表高级操作--------------------
克隆数据表
create table test01 like xny;
insert into test01 select * from xny;
#此方法能保证新表和旧表的结构、数据一样
create table test02 (select * from xny);
#此方法创建的新表和旧表数据一样,结构不一样
清空、删除表内的所有数据
delete from test01;
#delete清空表后,返回的结果内有删除的记录条目;delete工作时是一行一行的删除记录数据的;如果表中有自增长字段,之后新插入的会接着删除前的id;
truncate table test01;
相当于重建表,速度更快,相当于格式化,之后插入的不会接着删除签的id
创建临时表
临时表创建成功之后,使用show tables命令是看不到创建的临时表的,临时表会在连接退出后被销毁。如果在退出连接之前,也可以可执行增删改查等操作,比如使用 DROP TABLE语句手动之间删除临时表。
数据库MySQL的6大常见约束
主键约束 primary key 主键字段不允许有重复的记录,且不允许为空NULL,一个表只能有一个主键
唯一性约束 unique key 非空约束 not null 唯一键字段不允许有重复记录,但允许为NULL,一个表可以有多个唯一键
非空约束 not null
默认值约束 default
自增约束 auto-increment
外键约束 foreign key
外键的定义:如果同一个属性字段X在表一种是主键,而在表二中不是主键,则字段X称为表二的外键。
主键表和外键表的理解:
(1)以公共关键字作为主键的表为主建表(父表、主表)
(2)以公共关键字作为外键的表为外建表(从表、外键)
注意:与外键关联的主表的字段必须设置为主键。要求从表不能是临时表,主从表的字段具备相同的数据类型、字符长度和约束。
#创建主表
create table profession (pid int(4),pname char(10));
#设置主键
alter table prof add primary key(pid);
#创建从表
create table student (id int,name varchar(10),age int,proid int );
#设置外键
alter table student add constraint FK_PRO foreign key (proid) references prof (pid); #constraint 设置外键键名,通常FK开头 #references 关联外键和主键
登录别人mysql:mysql -ulisi -p123456 -h 192.168.179.22 -P 3306
#查用户权限
show grants for 'lisi'@'%';
#给用户权限
grant all on *.* to 'zhangsan'@'localhost';
#收回权限
rovoke all on *.* from 'zhangsan'@'localhost';
查看表结构:
desc 表名;
show create table 表名\G #更细节!
删除外键约束:
alter table student drop foreign key "FK_PRO"
只是删除外键,但保留名字
授权用户权限是 all privilege。这个all privilege 都有哪些权限?
all privilege 权限如下:
insert (插入数据)
select (查询数据)
update (更新表的数据)
delete (删除表中数据)
create (创建库,表)
drop (删除库,表)
refernces
index(建立索引)
alter (更改表属性)
create temp orary tables
lock tables(锁表)
execute
create view (创建视图)
show view (显示视图)
create routine(创建存储过程)
alter routine(修改存储过程)
event (事件)
trigger on (创建触发器)