一、建表(创建一个简单的用户权限关系表)

  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整理的更多相关文章

  1. MYSQL整理的语法

    MYSQL整理的语法 http://www.cnblogs.com/suoning/p/5744849.html

  2. .NetCore中EFCore for MySql整理(三)之Pomelo.EntityFrameworkCore.MySql

    一.Pomelo.EntityFrameworkCore.MySql简介 Git源代码地址:https://github.com/PomeloFoundation/Pomelo.EntityFrame ...

  3. .NetCore中EFCore for MySql整理(二)

    一.简介 EF Core for MySql的官方版本MySql.Data.EntityFrameworkCore 目前正是版已经可用当前版本v6.10,对于以前的预览版参考:http://www.c ...

  4. MySQL整理碎片

    1 innodb引擎表 alter table TABLE_NAME engine='innodb'; 还有一种方法 optiize table TABLE_NAME; http://stackove ...

  5. .NetCore中EFCore for MySql整理

    一.MySql官方提供了Ef Core对MySql的支持,但现在还处于预览版 Install-Package MySql.Data.EntityFrameworkCore -Pre Install-P ...

  6. 我的MySQL整理

    MySql unique的实现原理简析 MYSQL操作 MySql数据类型(转) MySql数据类型 MySql和CSV MySql超新手入门(很好的Mysql学习教材) MySql加锁处理分析 My ...

  7. 补充:MySQL整理

    1.连接Mysql 格式: mysql -h主机地址 -u用户名 -p用户密码 1.连接到本机上的MYSQL.首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root ...

  8. MySQL整理(三)

     一.简单单表操作   (1)简单CRUD 插入查询结果 insert into table1(id,name,age) select id,name,age from table2 where id ...

  9. MySQL整理(二)

    一.MySQL操作表的约束 MySQL提供了一系列机制来检查数据库表中的数据是否满足规定条件,以此来保证数据库表中数据的准确性和一致性,这种机制就是约束. (1)设置非空约束(NOT NULL),唯一 ...

随机推荐

  1. WEB页面的生命周期,DOMContentLoaded,load,beforeunload,unload

    简言 理解WEB页面的生命周期,文档加载事件及顺序对WEB开发有十分的重要意义.如果不理解,在元素未加载就提前操作元素,则得不到想要的结果.而如果页面完全加载完成后,再进行操作,则又会影响用户体验. ...

  2. java 堆和栈

    转载自 http://blog.csdn.net/peterwin1987/article/details/7571808 博主讲的相当清楚吼吼吼

  3. 单元测试——Qunit

    为什么需要单元测试 正确性:测试可以验证代码的正确性,在上线前做到心里有底 自动化:当然手工也可以测试,通过console可以打印出内部信息,但是这是一次性的事情,下次测试还需要从头来过,效率不能得到 ...

  4. JMS学习(一):初识JMS

    1.为什么使用JMS(java消息中间件)java message service 为了解决一个系统对服务调用进行解耦(在一个系统需要调用多个服务的时候,需要通过中间件来进行消息进行交流) 2.AMQ ...

  5. 百度前端技术学院js任务三

    任务地址:http://ife.baidu.com/course/detail/id/98 代码: <!DOCTYPE> <html> <head> <met ...

  6. Java版连连看

    连连看大家应该都玩过,不多说直接上一个做好的界面截图吧,所有的功能都在上面的,要做的就只是如何去实现它们了. 差不多就是这个样子.先说一下大致的思路吧.首先编写基本的界面:把什么按钮啊,表格啊什么的都 ...

  7. JVM笔记5-对象的访问定位。

    java虚拟机中指定一个栈内存的引用指向了堆内存中的对象.这样说只是笼统的说法.而指向堆内存中的对象就一定是栈引用所需要的那个对象吗?其实并不定. 这就需要知道对象的访问定位方式有两种: 1.使用句柄 ...

  8. Phpstrom操作git

    1.PHPstrom操作git[上传] 2.提交代码到仓库 2. 3.使用git bash上传代码仓库的代码到远程服务器 代开git bash进入到项目所在的目录,输入命令$  git push .上 ...

  9. 【前端】Vue2全家桶案例《看漫画》之四、漫画页

    转载请注明出处:http://www.cnblogs.com/shamoyuu/p/vue_vux_app_4.html 项目github地址:https://github.com/shamoyuu/ ...

  10. vscode格式化Vue出现的问题

    一.VSCode中使用vetur插件格式化vue文件时,js代码会自动加上冒号和分号 本来就是简写比较方便舒服,结果一个格式化回到解放前 最后找到问题原因: 首先,vetur默认设置是这个样的.也就是 ...