作者:gnuhpc
仅仅是看一些书是零零散散记下的,给自己备忘而已。建议去看专业网站的笔记。
1.主键的值必须是唯一的,并且不能为空,这可以提高MySQL从多个表中取得数据或者取得指定键值对应的行的速度。MySQL通过一个特殊的称为Index索引的数据结构做到这一点,Index是找到一条记录的快捷方式,就像图书馆的卡片目录。
2.查看表的列定义使用describe命令.
3.整数列大小默认是11.
4.Insert时引号的使用:数字数值、函数和NULL不要用,字符串数值、时间、日期则要用引号括起来。
5.使用alter修改表定义时,即使没有改变列的数据类型,列的定义仍然必不可少。
6.在使用select语句时,你应该养成TABLE.COLUMN方式来引用列,这样可以避免混淆。
7.结果排序用select XX from YY order by zz;
8.使用自然连接natural join可以避免输入很长的命令:MySQL可以把两个表中的同名域连接起来。可以使用左连接方式将表连接起来。
9.join on也是连接,但是需要指定要进行连接的列。SELECT * FROM books JOIN authors ON (books.title_id = authors.title_id);
10.使用别名可以将长的表名换成较短的,还可以让你在同一个查询中两次引用同一个表而区分你究竟是引用的第一个还是第二个。
SELECT * FROM books AS b,authors AS a WHERE b.title_id = a.title_id;
11.SQL语句特点:做什么+ 大概从哪+具体从哪,例如select from * where title_id=1;
12.查找:SELECT * FROM authors WHERE author LIKE "%b%"; 百分号是通配符,表示一个或多个。而下划线_则表示一个字符。
12.通过包含另外一张表的主键而形成的表之间的连接被称为外键关系。
13.数据库的关系有三种:一对一、一对多、多对多。以一个在线书店为例,用户和其邮寄地址(假设只能设定一个地址)时一对一的关系,而图书的类型与具体书籍则是一对多的关系,用户对书则是多对多的关系。多对多的关系被转换为两个一对多关系的变换表才能在数据库中体现出来。
14.规范化:
理清数据之间的关系并找出组织数据的最有效方式的过程被称作规范化。要规范化一个数据库,需要从最基础的规则开始,分为三个阶段——第一范式、第二范式、第三范式,后者必须在前者完成的基础上才可得以进行。
第一范式:解决数据在同一行内的冗余,要求所有的表不能重复的包含同样的数据列,所有的列中只能包含一个值,必须存在一个主键可以唯一指定一行数据,主键可以是一列或者多列,这取决于需要多少列才能唯一指定一行数据。
第二范式:解决数据在列中的冗余,要求不包含重复数值的列,这样的列要在其单独的表中,使用原有表中的主键来引用。
第三范式:满足前两个范式后第三范式是可选满足的条件,要求你找出表中不完全依赖于主键而依赖于其它域的数据,将这些信息单独放在一个表中。但这样的结果会产生太多的表,所以规范化也是需要把握度。
15.备份数据库:mysqldump -u root -p store > my_backup_of_store.sql
备份其中一个表:mysqldump -u root -p store authors > authors.sql
完全备份一个数据库:mysqldump -u root -p --all-databases > my_backup.sql
创建一个空的副本:mysqldump -u root -p --no-data store > structure.sql
只备份数据库数据而不备份数据库结构:mysqldump -u root -p --no-create-info store > data.sql
注:定期备份是best practise
16.恢复:
mysql -u root -p < my_backup.sql
要是有选择性的备份,则需要使用-D,mysql -u root -p -D store < my_backup.sql
17.导入:
mysqlimport -u root -p --fields-terminated-by=',' store books.txt
18.索引:
Index的数据是经过排序的,数据组织方式对查询进行了优化。我们要决定对哪些数据域进行索引,每个索引在存储上都是一个单独的数据文件。索引必须先定义后使用。使用索引的好处总结起来两点:匹配索引列的查询可以非常快,检查索引值的唯一性非常快,坏处在于对被索引的表的插入和删除操作会比较慢,而且需要额外的存储空间。
创建索引:CREATE UNIQUE INDEX authind ON authors (author) ;可以为多个列创建索引。适合用来索引的列是那些有可能被用在where子句中的列,特别是如果你知道某些特定列的组合会被用到时,就可以为这些列创建一个多列索引。
19.group by指定使用哪一列或者哪几列进行分组。
20.concat可以将多个域连接起来在结果中表示。SELECT CONCAT(title,' has ',pages,' pages.') FROM books;
+----------------------------------------+
| concat(title,' has ',pages,' pages.') |
+----------------------------------------+
| Linux in a Nutshell has 476 pages. |
| Classic Shell Scripting has 256 pages. |
+----------------------------------------+21.使用预定义分隔符连接:SELECT CONCAT_WS(',',author_id,title_id,author) FROM authors;
+------------------------------------------+
| CONCAT_WS(',',author_id,title_id,author) |
+------------------------------------------+
| 1,1,Ellen Siever |
| 2,1,Aaron Weber |
| 3,2,Arnold Robbins |
| 4,2,Nelson Beebe |
+------------------------------------------+22.字符串长度:
SELECT CONCAT(title,' has ',LENGTH(title), ' characters.') FROM books;
+-----------------------------------------------------+
| CONCAT(title,' has ',LENGTH(title), ' characters.') |
+-----------------------------------------------------+
| Linux in a Nutshell has 19 characters. |
| Classic Shell Scripting has 23 characters. |
+-----------------------------------------------------+23.字符串填充
SELECT LPAD(title,30,'.') FROM books;
+--------------------------------+
| LPAD(title,30,'.') |
+--------------------------------+
| ...........Linux in a Nutshell |
| .......Classic Shell Scripting |
+--------------------------------+
24.事务
强制数据库把几个更改操作看做一个工作单元,要么全部成功,要么全部失败。若使用存储引擎支持事务,比如InnoDB或者BDB,可以使用“start transaction”命令开始一个事务,事物结束时通过commit提交更改或rollback取消更改来完成。
作者:gnuhpc