1,数据库规范化
根据使用数据的方式来设计数据库的格式,不要储存重复数据,常用到的数据最好单列。
要描述的事物-->信息列表(如何取得信息)-->综合信息拆分-->原子性数据(不一定最小但是效率最高)
原子性的规则:1)具有原子性数据的列中不会有多个类型相同的值;2)具有原子性数据的表中不会有多个存储同类数据的列
设计查询的时候语句越简单越好。LIKE这样的模糊查询在查询精确数据时候很不方便,速度也不快,
第一范式:每个数据行必须包含具有原子性的值;每个数据行必须有独一无二的识别项,即主键。
主键规则:主键不能为NULL;插入新纪录必须指定主键;主键必须简洁;主键值不能被修改;
下面语句返回可以重建表但没有数据的CREATE TABLE 语句,返回的语句中表名和列名都会用反撇号引住,这个可以保留也可以删除。最后还有一句,是指明数据如何存储以及使用的字符集,这一句在默认情况下是不用管的,删了或是保留都不影响。
mysql>SHOW CREATE TABLE your_table;
关键词SHOW 的其他用法:
显示表的所有列及其数据类型和其他相关列的细节
mysql> SHOW COLUMNS FROM your_table;
显示所有编了索引的列以及索引类型,例如主键
mysql>SHOW INDEX FROM your_table;
收到控制台的错误信息后,查看详细的错误内容
mysql>SHOW WARNING;
在创建表的时候加上主键列并设置为自动递增.注意主键的规则,
mysql>CREATE TABLE my_table
-->(
-->contact_id INT NOT NULL AUTO_INCREMENT,
-->name VARCHAR(8) default NULL,
...
-->PRIMARY_KEY(contact_id)
-->);
创建了上面的表之后可以插入数据,插入数据时可以对主键赋值,也可以不管他,但是赋值的时候一定不能把已有的主键的值赋值给新的主键,不然会出错。
新的插入主键的方法:
mysql>ALTER TABLE my_table
-->ADD COLUMN id INT NOT NULL AUTO_INCREMENT FIRST,
-->ADD PRIMARY KEY(id);
2,改写
关键词 ALTER TABLE 表明要对数据表,RENAME TO 重命名表 , ADD COLUMN向表中增加一列, CHANGE COLUMN 同时改变列名称和类型 ,MODIFY COLUMN 只调整该列的数据类型或者位置,DROP COLUMN 删除一列,包括该列的所有数据,
mysql>ALTER TABLE my_table
-->RENAME TO table,
-->ADD COLUMN room INT(5) NOT NULL AUTO_INCREMENT LAST,
-->CHANGE COLUMN id student_id VARCHAR(7) ,
-->MODIFY COLUMN age VARCHAR(3),
-->MODIFY COLUMN name SECOND,
删除列
-->DROP COLUMN gender.
删除主键
-->DROP PRIMARY KEY;
有些RDBMS只有在添加新列时才允许改变顺序。改变顺序用到的关键词:FIRST,SECOND 等序数词,LAST, AFTER XX,BEFORE XX。
3,寻找模式
从名为location的列的字符串中,取出右侧的两个字符。取左侧的话换成LEFT。
mysql>SELECT RIGHT(location,2)FROM my_table;
从名为location的列的字符串中,取出从第1 个逗号前面的所有子串。要取第二个前面的,换成2 ;要取别的字符前面的,单引号中的字符换成想要的。
mysql>SELECT SUBSTRING_INDEX(location, ',' , 1)FROM my_table;
从起始位置 start_position开始取出your_string字符串的指定长度length的一个字符串
mysql>SELECT SUBSTRING('your_string',start_position,length);
把整个字符串中的字符都改成大写/小写
mysql>SELECT UPPER('your_string');
mysql>SELECT LOWER('your_string);
反转字符串里的字符排序
mysql>SELECT REVERSE('your_string');
去掉字符串左侧/右侧的空格
mysql>SELECT LTRIM(' your_string ');
mysql>SELECT RTRIM(' your_string ');
返回字符串长度,也就是字符串中含有的字符数
mysql>SELECT LENGTH('your_string');
以现有列的内容填入新的列,注意UPDATE 和SET的搭配,只用名称的话是可以遍历数表的。
用newValue的值填入column_name列
mysql>UPDATE my_table
-->SET column_name=newValue;
从location列右侧取出两个字符作为新的值加入到column_name列
mysql>UPDATE my_table
-->SET column_name=RIGHT(location,2);