mysql整理
一、建表(创建一个简单的用户权限关系表)
1.user(用户表)
CREATE TABLE `user` (
`username` varchar(255) NOT NULL,
`password` varchar(255) DEFAULT NULL,
`sex` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
PRIMARY KEY (`username`),
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
创建用户表,username(用户账号)设为unique唯一。
2.role(角色表)
create table role(
role_id int not null primary key,
role_name varchar(255) not null unique, #角色名称
role_description varchar(255) not null #角色描述
);
3.authority(权限表)
create table authority(
authority_id int not null primary key ,
authority_name varchar(255) not null unique,#权限名称
authority_description varchar(255) not null #权限描述
);
修改表属性:(如有需要的话)
#将user表的password字段的类型改成varchar(255)
alter table `user`
change column password password varchar(255)
删除表的字段:
#删除user表的user_id字段
alter table `user`
drop column user_id
4.user_role(用户角色表)
CREATE TABLE `user_role` (
`ur_id` varchar(255) NOT NULL,
`username` varchar(255) NOT NULL,
`role_id` varchar(255) NOT NULL,
PRIMARY KEY (`ur_id`),
KEY `role_ids` (`role_id`),
KEY `username` (`username`),
CONSTRAINT `username` FOREIGN KEY (`username`) REFERENCES `user` (`username`) ON DELETE CASCADE ON UPDATE CASCADE,#创建外键约束,并且会根据主表的更新而更新
CONSTRAINT `role_ids` FOREIGN KEY (`role_id`) REFERENCES `role` (`role_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
5.role_authority(角色权限表)
create table role_authority(
ra_id varchar(255) not null primary key,
authority_id varchar(255) not null,
role_id varchar(255) not null,
constraint authority_id foreign key(authority_id) references authority(authority_id) on update CASCADE on delete CASCADE,
constraint role_id2 foreign key(role_id) references role(role_id) on update CASCADE on delete CASCADE
);
建完的ER图:

主从关系:(从表数据会依赖于主表的数据)
主表:userb表、role表、authority表
从表:user_role表、role_authority表
二、常用修改命令
ALTER TABLE:添加,修改,删除表的列,约束等表的定义。
· 查看列:desc 表名;
· 修改表名:alter table t_book rename to bbb;
· 添加列:alter table 表名 add column 列名 varchar(30);
· 删除列:alter table 表名 drop column 列名;
· 修改列名MySQL: alter table bbb change nnnnn hh int;
· 修改列名SQLServer:exec sp_rename't_student.name','nn','column';
· 修改列名Oracle:lter table bbb rename column nnnnn to hh int;
· 修改列属性:alter table t_book modify name varchar(22);
MySQL 查看约束,添加约束,删除约束 添加列,修改列,删除列
· 查看表的字段信息:desc 表名;
· 查看表的所有信息:show create table 表名;
· 添加主键约束:alter table 表名 add constraint 主键 (形如:PK_表名) primary key 表名(主键字段);
· 添加外键约束:alter table 从表 add constraint 外键(形如:FK_从表_主表) foreign key 从表(外键字段) references 主表(主键字段);
· 删除主键约束:alter table 表名 drop primary key;
· 删除外键约束:alter table 表名 drop foreign key 外键(区分大小写);
· 修改表名:alter table t_book rename to bbb;
· 添加列:alter table 表名 add column 列名 varchar(30);
· 删除列:alter table 表名 drop column 列名;
· 修改列名MySQL: alter table bbb change nnnnn hh int;
· 修改列名SQLServer:exec sp_rename't_student.name','nn','column';
· 修改列名Oracle:alter table bbb rename column nnnnn to hh int;
· 修改列属性:alter table t_book modify name varchar(22);
三、数据库索引
1.关于索引的总结:http://feiyan.info/16.html
2.一句话理解数据库索引:https://my.oschina.net/gooke/blog/678556
3.并不是所有的表都适合创建索引,不适合索引的表具有如下特点:
- 第一,对于那些在查询中很少使用或者参考的列不应该创建索引。这是因 为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。
- 第二,对于那 些只有很少数据值的列也不应该增加索引。这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索速度。
- 第三,对于那些定义为text, image和bit数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少。
- 第四,当修改性能远远大于检索性能时,不应该创建索 引。这是因为,修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因 此,当修改性能远远大于检索性能时,不应该创建索引。
4.几种创建索引的方法:
1、添加PRIMARY KEY(主键索引)
mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )
2、添加UNIQUE(唯一索引)
mysql>ALTER TABLE `table_name` ADD UNIQUE ( `column` )
3、添加INDEX(普通索引)
mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` )
4、添加FULLTEXT(全文索引)
mysql>ALTER TABLE `table_name` ADD FULLTEXT ( `column`)
5、添加多列索引
mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )
6、删除索引
mysql>drop index username on user 【username:索引名称,user:表名】
mysql整理的更多相关文章
- MYSQL整理的语法
MYSQL整理的语法 http://www.cnblogs.com/suoning/p/5744849.html
- .NetCore中EFCore for MySql整理(三)之Pomelo.EntityFrameworkCore.MySql
一.Pomelo.EntityFrameworkCore.MySql简介 Git源代码地址:https://github.com/PomeloFoundation/Pomelo.EntityFrame ...
- .NetCore中EFCore for MySql整理(二)
一.简介 EF Core for MySql的官方版本MySql.Data.EntityFrameworkCore 目前正是版已经可用当前版本v6.10,对于以前的预览版参考:http://www.c ...
- MySQL整理碎片
1 innodb引擎表 alter table TABLE_NAME engine='innodb'; 还有一种方法 optiize table TABLE_NAME; http://stackove ...
- .NetCore中EFCore for MySql整理
一.MySql官方提供了Ef Core对MySql的支持,但现在还处于预览版 Install-Package MySql.Data.EntityFrameworkCore -Pre Install-P ...
- 我的MySQL整理
MySql unique的实现原理简析 MYSQL操作 MySql数据类型(转) MySql数据类型 MySql和CSV MySql超新手入门(很好的Mysql学习教材) MySql加锁处理分析 My ...
- 补充:MySQL整理
1.连接Mysql 格式: mysql -h主机地址 -u用户名 -p用户密码 1.连接到本机上的MYSQL.首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root ...
- MySQL整理(三)
一.简单单表操作 (1)简单CRUD 插入查询结果 insert into table1(id,name,age) select id,name,age from table2 where id ...
- MySQL整理(二)
一.MySQL操作表的约束 MySQL提供了一系列机制来检查数据库表中的数据是否满足规定条件,以此来保证数据库表中数据的准确性和一致性,这种机制就是约束. (1)设置非空约束(NOT NULL),唯一 ...
随机推荐
- 彻底理解 Android 中的阴影
如果我们想创造更好的 Android App,我相信我们需要遵循 Material Design 的设计规范.一般而言,Material Design 是一个包含光线,材质和投影的三维环境.如果我们想 ...
- 架构师入门:搭建双注册中心的高可用Eureka架构(基于项目实战)
本文的案例是基于 架构师入门:搭建基本的Eureka架构(从项目里抽取) 改写的. 在上文里,我们演示Eureka客户端调用服务的整个流程,在这部分里我们将在架构上有所改进.大家可以想象下,在上文里案 ...
- HTML5-svg圆形饼状图进度条实现原理
<svg width="440" height="440" viewbox="0 0 440 440"> <circle ...
- String类为什么是final的
首先我们使用new创建一个String对象的时候比如: String str=new String("123"); 这句话里面创建了两个对象,第一个在系统中创建了一个"a ...
- myeclispe中向mysql中插入中文数据出现??问题解决办法
或许很多人会出现??这种令人头痛的mysql的中文乱码问题:解决如下: 1.先对于新建的数据库要设置默认的字符集为UTF-8 create database mydb default characte ...
- AJAX跨域完全讲解
AJAX跨域完全讲解 今天在慕课网上学习了AJAX跨域完全讲解:https://www.imooc.com/learn/947 我在收集AJAX面试题的时候其实就已经有过AJAX跨域的问题的了,当时候 ...
- PHP动态编译出现Cannot find autoconf的解决方法
wget http://ftp.gnu.org/gnu/m4/m4-1.4.9.tar.gz tar -zvxf m4-.tar.gz cd m4-/ ./configure && m ...
- UVA - 11636 Hello World! (贪心)
思路:复制次数最少并且可以部分复制,那么贪心地让当前尽量多的复制,如果最后一次复制会超过n,那就部分复制.即满足并且x尽量小. AC代码 #include <stdio.h> const ...
- nyoj234 吃土豆 01背包
思路:假设我们先只考虑一行,规则就是取了i处的土豆,每一个土豆有两种选择,拿与不拿,那么i-1和i+1处的土豆都不能再取,那么要求某一行的最大取值就用一次动态规划即可,dp(i)表示前i个土豆能取得的 ...
- HDU - 2181 dfs [kuangbin带你飞]专题二
保存每个节点的下一个节点一直往下面走就行了,不能重复经过某个点,当经过的点达到20个而且当前节点的下一个节点是起点就打印答案. AC代码 #include<cstdio> #include ...