下面为个人看《MySQL必知必会》时做的笔记,感觉《MySQL必知必会》属于一般笔记基础的书,可以巩固一下之前的基础。下面的SQL语句大部分是dede_scores表的,下面是创建表的语句:
CREATE TABLE `dede_scores` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`titles` char(15) NOT NULL,
`icon` smallint(6) unsigned DEFAULT '0',
`integral` int(10) NOT NULL DEFAULT '0',
`isdefault` tinyint(1) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `integral` (`integral`) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=17 DEFAULT CHARSET=gbk
8、拼接字段Concat :例如最后要展示的格式为:列兵(2)
select Concat(titles, '(', id, ')') from dede_scores;
9、去除空格:RTrim()去掉右边空格,LTrim():去掉左边的空格
select Concat(RTrim(titles), '(', id, ')') from dede_scores;
10、别名:AS
select titles as 头衔 from dede_scores;
11、计算
select id * icon from dede_scores;
12、SQL的函数的移植性不强,使用时要注意
13、文本处理函数:
13.1、Left() : 返回串左边的字串
13.2、Length():返回串的长度
13.3、Locate():找出串的一个字串
13.4、Lower():将串转换为小写
13.5、Ltrim():去掉串的左边的空格
13.6、Right():返回串的右边的空格
13.7、RTrim():去掉串的右边的空格
13.8、Soundex():返回串的SOUNDEX值
13.9、SubString():返回子串的字符
14.0:、Upper()函数:将文本转换为大写
14、时间函数:
14.1、AddDate():增加一个日期(天、周)
14.2、AddTime():增加一个时间(时、分)
14.3、CurDate():返回当前的日期
14.4、CurTime():返回当前的时间
14.6、Date():返回当前时间的日期部分
14.7、DateDiff():返回两个日期之差
14.8、Date_Add():高度灵活的日期运算函数
14.9、Date_Format():返回一个格式化的日期和时间串
14.9.1、Day():返回一个日期的天数部分
14.9.2、DayOfWeek():对于一个日期,返回对于的星期几
14.9.3、Hour():返回一个时间的小时部分
14.9.4、Minute():返回一个时间的分钟部分
14.9.5、month():返回一个时间的月份部分
14.9.6、Now():返回当前日期和时间
14.9.7、Second():返回一个时间的秒部分
14.9.8、Time():返回一个日期时间的时间部分
14.9.9:、Year():返回一个日期的年份部分
15、不管是插入还是更像还是用Where子句进行过滤,日期的格式必须为yyy-mm-dd,其他的格式虽然支持,但是建议用上面的格式
16、数值处理函数
16.1、Abs():返回一个数的绝对值
16.2、Cos():返回一个角度的余弦
16.3、Sin():返回一个角度的正弦
16.4、Tan():返回一个角度的正切
16.5、Exp():返回一个数的指数值
16.6、Mod():返回除操作的余数
16.7、Pi()、返回圆周率
16.8、Rand()
16.9、Sqrt():返回一个数的平方根
17、聚集函数
17.1、AVG():返回某列的平均值
17.2、COUNT():返回某列的行数
17.3、MAX():返回某列的最大值
17.4、MIN():返回某列的最小值
17.5、SUM():返回某列值之和
18、分组Group By:select id, integral from dede_scores group by integral;
19、分组过滤HAVING:select id,isdefault from dede_scores group by isdefault having count(*)>2;
20、where 做不了的having可以做:select id, sum(integral) as c from dede_scores group by isdefault where c >2;
21、select 的顺序:
select
from
where
group by
having
order by
limit
22、笛卡尔积:由没有联结条件的表返回的结果为笛卡尔积,检索出的行的数目是将第一个表中的行数乘以第二行中的行数。例如:select vend_name, prod_name,prod_price from vendors,products;
23、内部联结INNER JOIN:select vend_name,prod_name,prod_price from vendors INNER JOIN products ON vemdors.vend_id = products.vend_id;
24、别名 AS: select t1.id from dede_scores t1 where t1.type = 2;
25、自联结:语句a、select prod_id,prod_name from products where vend_id = (select vend_id from products where prod_id = 'DTNTR') 语句b:select p1.prod_id, p1.prod_name from products as p1,products as p2 where p1.vend_id = p2.vend_id AND p2.prod_id = 'DTNTR' 语句a可以转换为语句b,可以看具体的性能转换使用,自联结通常作为外部语句来替代从相同表中检索数据时使用的子查询语句。
26、自然联结:select t1.id,t2.name from dede_scores as t1, dede_test t2 where t1.id = t2.scores_id
27、LEFT OUTER JOIN xxx ON RIGHT OUTER JOIN xxx ON INNER JOIN xxx ON
28、组合查询UNION:select vend_id,prod_id,prod_price from products where prod_price <=5 UNION select vemd_id, prod_id, prod_price from products where vend_id in (1001, 1002)
29、UNION会自动去掉重复的行,UNION ALL会返回所有的行,包括重复的,WHERE 会返回去掉重复的行
30、启用全文搜索的支持:
CREATE TABLE productnotes (
note_id int NOT NULL AUTO_INCREMENT,
prod_id char(10) NOT NULL,
note_date datetime NOT NULL,
note_text text NULL,
PRIMARY KEY(note_id),
FULLTEXT(note_text)
) ENGINE=MyISAM;
31、不指定字段名插入数据:INSERT INTO customers VALUES ('ccc', 'USA', NULL)【不建议使用】
32、指定字段名插入数据:INSERT INTO customers('name', 'address','text') VALUES ('ccc', 'USA', NULL)
33、insert 操作的处理很耗时,如果检索比插入重要,则可以在insert 和into之间添加关键字LOW_PRIORITY指示MySQL降低Insert语句的优先级
34、一条语句插入多条数据:INSERT INTO customers('name', 'address','text') VALUES ('ccc', 'USA', NULL), ('ccc1', 'USA', NULL)
35、update customers ser cust_email = 'cdy1263@163.com' where cust_id = 10005;
36、update ignore:如果update语句更新多行,并且更新的行中出现一行或者多行的错误,则更新全部被取消,如果在update后面添加ignore字段,即使发生错误,更新也可以继续。
37、删除单条数据:delete from customers where cust_id = 10006;
38、删除表的全部数据:truncate customers;
39、InnoDB是一个可靠的事务处理引擎,但是不支持文本搜索;MyISAM是一个性能极高的引擎,支持全文本搜索,但是不支持事务的处理
40、修改表:alter table vendors
add vend_phone char(20);
41、删除表:drop table customers;
42、重命名表:rename table customers to customer;
43、为什么使用视图:
a、重用SQL语句
b、简化复制的SQL操作
c、使用表的组成部分而不是整个表;
d、保护数据,可以给用户授权表的特定部分的访问权限而不是整个表的访问权限
e、更改数据格式和表示
44、创建视图:create view;
查看创建的视图的语句:show create view xxx;
删除视图:drop view xxx;
更新视图:可以先删除实体再创建 或者用create or replace view xxx
45、创建视图:create view productcustomers as select cust_name, cust_contanct, prod_id from customers,orders,ordertimes where customers.cust_id = orders.cust_id and orderitems.order_num = order.order_num;
46、存储过程的优点:
a、简化复杂的操作
b、保证了数据的完整性
c、简化对变动的管理
d、提高性能
47、存储过程的缺点:
a、对开发人员的要求高
b、更高的对数据库的操作权限
48、创建一个newproduct的触发器,触发器是在insert 之后,这个触发器还指定FOR EACH ROW,因此代码在对每个插入行执行,将显示‘Product added’:CREATE TRIGGER newproduct AFTER INSTERT ON products FOR EACH ROW SELECT 'Product added'
49、删除触发器:drop trigger