目录
1介绍:
1.1数据库对象命名规则:
必须以字母开头 可包括数字和三个特殊字符(# _ $) 不要使用MySQL的保留字 同 一 Schema下的对象不能同名
1.2对象分类:
表:基本的数据存储对象 以行和列的方式存在 列就是字段 行就是记录
约束:执行数据的校验 保存数据的完整性
数据字典:系统表 存放数据库的相关信息
视图:一个或者多个数据表的逻辑显示
索引:用于提高查询的性能
2. 表的基本操作:
2.1表的类型:
2.1.1: MyISAM(一种引擎):
r.frm # 描述表结构文件,字段长度等, frame框架
.MYD # 数据信息文件,存储数据信息 (如果采用独立表存储模式) data
.MYI # 索引信息文件,index
2.1.2: InnoDB(默认的存储引擎):
t.frm:存储列相关信息,描述表结构文件,字段长度等
t.ibd:数据行+索引,如果采用独立表存储模式,data\a中还会产生b.ibd文件 (存 储数据信息和索引信 息)
二者区别可见:MyISAM和InnoDB的区别_innodb和myisam有什么区别_牛牛的Java学习之旅的博客-CSDN博客
2.2 创建表
语法:CREATE TABLE 表名( 列名 列类型, 列名 列类型 );
2.3 查看表:
语法:SHOW TABLES[FROM 数据库名][LIKE wild]; //显示当前数据库已有的数据表 信息
DESCRIBE: 查看数据库中的各列信息
{DESCRIBE|DESC}表名[列名];
show columns from 表名称; //表名后加上\G 可以查看更全面的表定义信息
2.4 删除表:
语法: DROP TABLE [IF EXISTS] 表名; //删除指定的表 if判断是否存在
2.5:修改表结构:
1:修改列类型: ALTER TABLE 表名 MODIFY 列名 列类型;
2:增加列:ALTER TABLE 表名 ADD 列名 列类型;
3:删除列: ALTER TABLE 表名 DROP 列名;
4:列改名:ALTER TABLE 表名 CHANGE 旧列名 新列名 列类型;
5:更改表名: ALTER TABLE 表名 RENAME 新表名;
RENAME TABLE 表名 TO 新表名;
2.6复制表的结构:
1.create table 新表名 like 源表 //可以将源表的表结构复制到新表中
2.create table 新表名 select * from 源表 //可以实现表结构的复制,甚至可以将源 表的表 记录拷贝到新表中。
3:insert into 表 select * from 原表; //如果已经存在一张结构一致的表,复制数据
2.7 表的约束 :
约束是在表上强制执行的数据校验规则。约束主要用于保证数据库的完整 性。当表中数据有相互依赖性 时,可以保护相关的数据不被删除。
1.分类:
NOT NULL非空:确保字段值不允许为空
UNIQUE Key唯一键 :唯一性约束条件确保所在的字段或者字段组合不 出现重复值
PRIMARY KEY主键 :主键从功能上看相当于非空且唯一 一个表中只允 许一个主键 主键是表中唯一确定一行数据的字段
FOREIGN KEY外键:外键是构建于一个表的两个字段或者两个表的两 个字段之间的关系
CHECK检查:
2.创建约束
在建表的同时创建约束:
CREATE TABLE tb_student( id INT PRIMAR KEY AUTO_INCREMENT,
NAME VARCHAR(18) NOT NULL )
建表后创建约束(修改表):
alter table 表名 add constraint 约束名 约束类型(要约束的列名)
3.删除约束:
删除NOT NULL约束:
alter table 表名 modify 列名 类型;
删除UNIQUE约束:
alter table 表名 drop index 惟一约束名;
删除PRIMARY KEY约束:
alter table 表名 drop primary key;
删除FOREIGN KEY约束:
alter table 表名 drop foreign key 外键名:
4.自动增长和默认值:
auto_increment :自动增长
为新的行产生唯一的标识 一个表只能优一个auto_increment,且该 属性必须为主键的一部分。auto_increment的属性可以是 任何整数 类型
3.用户授权:
3.1密码策略:
MySQL安装时为root用户随机生成了一个密码,打印在error_log中,关于error_log 的位置,如果安装的是 RPM包,则默认是 /var/log/mysqld.log 。
awk '/temporary password/ {print $NF}' /var/log/mysqld.log
3.1.1查看数据库当前密码策略:
show VARIABLES like "%password%";
3.1.2 查看密码插件:
SHOW VARIABLES LIKE 'validate_password%';
3.1.3 更改策略:
更改密码策略为LOW,改为LOW或0
mysql> SET GLOBAL validate_password_policy='LOW';
更改密码长度
mysql> SET GLOBAL validate_password_length=0
设置大小写、数字和特殊字符均不要求。
mysql> SET GLOBAL validate_password_special_char_count=0;
mysql> SET GLOBAL validate_password_mixed_case_count=0;
mysql> SET GLOBAL validate_password_number_count=0;
查看:
mysql> SET GLOBAL validate_password_length=0;
mysql> SHOW VARIABLES LIKE 'validate_password%';
3.2 授权和撤销授权
3.2.1 授权:
语法格式: grant 权限列表 on 库名.表名 to 用户名@'客户端主机' [identified by '密码' with option参数];
grant select on testdb.* to common_user@'%'
grant insert on testdb.* to common_user@'%'
grant create on testdb.* to developer@'192.168.0.%';
grant alter on testdb.* to developer@'192.168.0.%';
show grants; -- 查看当前用户(自己)权限
show grants for dba@localhost;
3.2.2 移除:
revoke 跟 grant 的语法差不多,只需要把关键字 “to” 换成 “from” 即可
revoke all on *.* from dba@localhost;
3.2.3 创建用户:
CREATE USER user1@’localhost’ IDENTIFIED BY ‘123456’;
GRANT SELECT ON *.* TO user3@’localhost’ IDENTIFIED BY ‘123456’;
4 练习:
mysql> create database Market; //创建数据库
Query OK, 1 row affected (0.00 sec)
mysql> use Market;
Database changed
//创建表 约束
mysql> create table customers(c_num int(11) primary key auto_increment not null UNIQUE Key,
-> c_name varchar(50),
-> c_city varchar(50),
-> c_birth datetime not null);
Query OK, 0 rows affected (0.00 sec)
//添加字段 默认最后 可以指定字段后面 用after
mysql> alter table customers add c_contact varchar(50);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
//更改字段
mysql> alter table customers change c_contact c_phone varchar(50);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
//更改字段类型
mysql> alter table customers modify c_name varchar(70);
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
//添加字段
mysql> alter table customers add c_gender char(1);
Query OK, 0 rows affected (0.13 sec)
Records: 0 Duplicates: 0 Warnings: 0
//更改表名
mysql> alter table customers rename customers_info;
Query OK, 0 rows affected (0.00 sec)
//删除字段
mysql> alter table customers_info drop c_city;
Query OK, 0 rows affected (0.17 sec)
Records: 0 Duplicates: 0 Warnings: 0
//修改存储引擎
mysql> alter table customers_info engine = MyISAM;
Query OK, 0 rows affected (0.00 sec)
mysql> alter table customers_info engine = MyIsAM;
Query OK, 0 rows affected (0.00 sec)
//创建外键时 字段类型需要一样 存储方式也一样
mysql> create table orders( o_num int(11) primary key auto_increment, o_data date, c_id int(11), constraint `links` foreign key(c_id) references customers_info(c_num));
Query OK, 0 rows affected (0.38 sec)
//删除外键连接
mysql> alter table orders drop foreign key links;
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
//删除表
mysql> drop table customers_info;
Query OK, 0 rows affected (0.33 sec)
//创建表
mysql> create table player( playid int primary key, playname varchar(30) not null, teamnum int not null unique, info varchar(50));
Query OK, 0 rows affected (0.32 sec)
//创建用户
mysql>create user accountl@localhost identified by 'oldpwdl';
//用户权限设置
mysql> grant select on Team.player to accountl@localhost;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> grant insert on Team.player to accountl@localhost;
Query OK, 0 rows affected (0.01 sec)
mysql> grant update(info) on Team.player to accountl@localhost;
Query OK, 0 rows affected (0.00 sec)
//更改用户密码
mysql> alter user accountl@localhost identified by 'newpwd2';
Query OK, 0 rows affected (0.00 sec)
//刷新权限表
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
//查看用户权限
mysql> show grants for accountl@localhost;
+----------------------------------------------------------------------------------+
| Grants for accountl@localhost |
+----------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'accountl'@'localhost' |
| GRANT SELECT, INSERT, UPDATE (info) ON `Team`.`player` TO 'accountl'@'localhost' |
+----------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
//移除用户权限
mysql> use mysql
mysql> revoke select on Team.player from accountl@'localhost';
mysql> revoke insert on Team.player from accountl@'localhost';
mysql> revoke update(info) on Team.player from accountl@'localhost';
//删除用户
mysql> drop user accountl@'localhost';