31.INSERT INTO 表名(列名1,列名2……) VALUES(列1值,列2值……),这个方法比直接传入值比较繁琐,但是比较安全,因为它不依靠表中列的顺序。
32.使用 INSERT LOW_PRIORITY INTO可以降低INSERT 语句的优先级,同样适用于UPDATE DELETE.
33.可以将多条INSERT 语句写在一起,中间用分号隔开。如果是插入到同一个表中,并且插入的列的顺序相同则可以使用以下方法: VALUES(值),(值),(值); 这个方法速度较快。
34.可以使用INSERT SELECT语句将查询结果插入表。使用方法如下:
INSERT INTO 表名(列名1,列名2……) SELECT 列名1,列名2…… FROM 表名
WHERE …… 注意:INSERT中的列依次对应于SELECT语句中的列。
35.UPDATE使用方法:UPDATE 表名 SET 列名1=值,列名2=值 WHERE 条件。注意UPDATA可以使用子查询,即让检索出的值去更新列值。
为了删除某个特定的列可以将该列的值设置为NULL(如果该列允许NULL值)
如果想让更新操作在某个行上失败时仍继续执行下去,可以使用UPDATE IGNORE
36.DELETE使用方法:DELETE FROM 表名 WHERE 条件。若想删除所有行则可以使用TRUNCATE TABLE,这个方法更快,以为它直接删除表并重新创建表。
37.如要在相同表名的表不存在的时候再创建表,可以使用IF NOT EXISTS.
38.每个表只能有一个AURO_INCREMENT的列,可以使用last_insert_id()方法返回最后一个AUTO_INCREMENT值
39.在创建表时可以给列指定默认值,如果再插入数据时没有明确指定值,则使用默认值,用法: DEFAULT 值,且在MySQL中默认值值允许是常量
40.MySQL有多个内部引擎,这些引擎是用来具体管理和处理数据的。以下是其中几种:
InnoDB:可靠的事物处理引擎,目前也已经支持全文搜索
MEMORY:功能上等同于MyISAM,但数据存储在内存中,速度很快,可以用作临时表
MyISAM:性能极高,支持全文搜索。
41.外键不能跨引擎,就是通过外键相关联的表必须使用同一个引擎,在创建外键的时候必须建立索引。
42.要在创建表之后对表的属性进行更改,可以使用ALTER TABLE语句。
ALTER TABLE 表名 ADD 列名及属性 用于增加一列
ALTER TABLE 表名 DROP COLUMN 列名 用于删除一列
43.DROP TABLE 表名 删除表
44.RENAME TABLE 表原名 TO 表现名 更改表的名字
45.创建外间的方法:
1,在创建表的时候创建:CONSTRAINT 标记(可以没有)FOREIGN KEY(列名) REFERENCES 被引用外键的表名(列名)
2,通过ALTER语句: ALTER TABLE 表名 ADD CONSTRAINT 标记(可以没有)FOREIGN KEY(列名) REFERENCES 被引用外键的表名(列名)
46.视图并不是真正的表,在使用它的时候是动态查询其他表中的内容的,一般在以下情况下使用视图:
需要重用SQL语句;
简化复杂的SQL语句;
保护数据,可以给用户授予特定表的访问权限而不是整个表(视图已经给你定好了你可以访问表的哪些部分,而你相当于在黑盒操作);
更改数据格式和表示。视图可以把不同表的数据相互组合形成新的数据格式进行返回
只使用表的用户所需要的部分
47.对视图的使用并没有很多限制,可以把它当做普通的SELECT语句来进行结合,也可以把表和视图联结在一起使用。其实所谓视图就是预先定义一些SELECT语句,在执行的时候返回这些SELECT语句的结果。
48.用CREATE VIEW viewname AS创建视图, SHOW CREATE VIEW viewname 显示创建视图的语句 DROP VIEW viewname 删除视图 更新视图比较繁琐,需要先删除在重新创建视图,或者使用 CREATE OR REPLACE VIEW ,意思是不存在就创建,存在就取代,但是视图一般都是用于数据检索的,注意。
49.由于视图就是虚拟的表,所以可以用 SHOW TABLES 检索出创建的视图。
50.存储过程,可以理解为用SQL语句编写一些小的函数,能完成特定的功能。
51.注意:因为在定义存储过程时要在语句之间用;进行分隔, 但是MySQL命令行实用程序中会把;当做一条语句的分隔符,也就是说MySQL命令行实用工具和MySQL语句的默认分隔符都是;这样就会出错。所以在编写存储过程前,应该先把 命令行实用工具的分隔符改为其他的,比如使用 DELIMITER // 改为// ,然后在定义完存储过程之后再改回来。
52.使用DROP PROCEDURE procedurename; 删除存储过程。
53.存储过程的调用:CALL procedurename(参数) 其中传入存储过程的参数直接输入就行,而传出的参数必须以@开头
54.存储过程的创建:CREATE PROCEDURE procedurename(
OUT P1 DECIMAL,
IN P2 INT,
)
BEGIN
SQL语句体,比如SELECT……INTO……FROM……
WHERE……
使用INTO P1 把结果给到P1,
输入变量可以直接使用,
每条语句用;分隔
在调用存储过程的时候必须写上所有参数,且输出参数以@开头
每个参数都得定义类型
存储过程允许的参数类型与表中使用的数据类型相同,且不能
传递多个行和列。
END
55.存储过程在简单的语句中并没有优势,但在复杂的业务处理中和智能处理中,能发挥极大的作用。
56.- -在MySQL中是注释符。
57.在存储过程的BEGIN END中可以用DECLARE 参数名 参数类型 DEFAULT 参数默认值; 来定义变量
58.其实在BEGIN END内就是用SQL语句定义函数,只要掌握一些SQL的语法就行。
59.SHOW CREATE TABLE,VIEW,PROCEDURE 名称,来查看创建他们的create语句,
也可以使用 SHOW PROCEDURE,TABLE,VIEW STATUS LIKE 名称,来显示更详细的信息,LIKE用来筛选,去掉LIKE则显示所有信息。
60.MySQL中判断是否等于用=,不等用!=
61.在MySQL中,IF ELSE 语句中,END IF 要放在ELSE之后,而不是IF语句结束之后。
62.MySQL中游标只能在存储过程中使用,游标其实就是用一条SELECT语句返回结果集,目的是为了在存储过程中方便使用检索出来的结果集。在使用前必须下声明它,之后用OPEN 打开游标,此时执行前面定义的SELECT语句并把数据检索出来,使用结束之后用CLOSE结束游标的使用。
63.游标的创建:DECLARE 游标名字 CURSOR FOR SELECT语句;
64.使用FETCH来获取游标中的值,
65.在存储过程中调用存储过程那么内部调用的存储过程中的参数前不需要加@
66.REPEAT …… UNTIL……END REPEAT,MySQL中的循环语句。
67.当你需要在某个表发生改变时自动进行某些处理,那么你可以使用触发器。并且触发器只能响应DELETE,INSERT,UPDATE语句或者BEGIN END之间的一组语句,且分AFTER BEFORE ,表示事件之前或者之后。
68.在最新的MySQL版本中不允许触发器返回一个结果集。
69.只有表才支持触发器,并且每个表的每个事件只允许一个触发器,也就是说每个表最多支持6个触发器。每个触发器只能与一个表中的一个事件关联。
70.在INSERT触发器中,可以使用名为NEW的虚拟表,访问被插入的数据,格式为:NEW.列名。
71.在DELETE触发器中可以使用名为OLD的虚拟表,访问被删除的数据,并且OLD中的值只能是只读的不能更新。
72.如果要在INSERT 或者UPDATE中利用触发器更改数据(使用NEW),则应该用BEFORE,说明在表中已经更新或者插入数据之后使用触发器是无法更改数据的。所以BEFORE常常用于数据验证和净化,总之就是在数据被存入表之前进行的操作应该放到BEFORE中。
73.如果触发器是BEFORE那么,如果触发器执行失败,那么之后的MySQL操作也将不执行,并且后面的AFTER触发器也不会被执行。
74.在UPDATE触发器中用OLD访问UPDATE语句执行之前的数据,NEW访问UPDATE语句执行之后更新的数据,并且如果触发器是BEFOR则仍然可以用NEW来更改数据。
75.使用触发器可以大大降低程序代码和数据库之间的联系,增加逻辑独立性。可以把一些数据的净化,跟踪等放到触发器中。
76.触发器的创建:CREATE TRIGGER 触发器名 AFTER(BEFORE) INSERT(DELETE,UPDATE) ON 表名 FOR EACH ROW 执行语句或者
BEGIN END语句体。
77.MySQL的默认引擎是MyISAM,但它不支持事物管理,而InnoDB支持。
78.在事物管理中的几个重要单词:transaction 事物 rollback 回退 commit 提交 savapoint 保留点.
79.事物管理中的rollback用在start transaction之后,commit之前,而且可以用来回退INSERT UPDATE DELETE语句。
80.事物不会一直存在,当提交或者回退之后就会关闭,并且失去作用。
81.保留点的作用:如果你不想在发生错误的时候回退所有事务处理,或者需要根据不同情况回退到不同的事物处理阶段,那么就应该使用保留点。用法:SAVEPOINT 保留点名字
使用 ROLLBACK TO 保留点名字,就回退到该保留点。保留点在事物处理完成之后会自动释放,你也可以使用RELEASE SAVEPOINT 来指定释放的保留点。
82.首先,在事物处理块中,提交不会自动进行,需要COMMIT,也就是说事物最后需要真正对表进行操作的话就要使用COMMIT。但是一般MySQL语句是默认自动提交的,你也可以通过 SET autocommit=0; 可以让MySQL不自动提交更改。所以当你需要处理事物的时候就有了2种选择,一是通过事物处理块,二是直接设置为不自动提交,可以根据需要进行选择,但个人认为通过事物处理块进行操作比较好。
注意:autocommit标志只是针对每个连接而不是服务器的,即使你这次设置了不自动提交,下次重新建立连接的时候也是自动提交的。
83.SHOW CHARACTER SET; 显示所有可用的字符集 SHOW COLLATION; 显示所有可用的校对,以及它们适用的字符集,注意:_cs,表示区分大小写 _ci,表示不区分大小写。
84.可以在创建表的时候设置表的字符集和校对,格式:在创建表的()外面加上:DEFAULT CHARACTER SET 字符集 COLLATE 校对; 你也可以在需要特殊设定的列之后使用 CHARACTER SET 字符集 COLLATE 校对,来进行设置。甚至你还可以在SELECT语句中指定校对,格式如下:ORDER BY 列名 COLLATE 校对;当然在GROUP BY,HAVING,聚集函数,别名中也可以使用COLLATE。
85.在真实的数据库使用中,比如为软件配置数据库,你应该利用用户账号来管理用户的访问权限,而不是像在测试时候一样使用root用户。
86.MySQL用户账号和信息存储在名为mysql的MySQL数据库中。通过SELECT user FROM user;可以查看所有的用户账号。注意:使用mysql数据库需要权限。
87.创建一个用户:CREATE USER 用户名 (IDENTIFIED BY ‘ 密码 ’); 括号中的口令可有可无,若有则为其设置密码,也可以在创建表之后为其设定密码。
88.使用RENAME USER 原用户名 TO 现用户名; 更改用户名
89.DROP USER 用户名; 删除一个用户账号。
90.SHOW GRANTS FOR 用户名; 查看用户账号的权限。注意:权限中USAGE表示没有任何权限。
91.授予用户权限:GRANT 允许的操作,如SELECT,INSERT等 ON 允许操作的对象,可以是整个数据库,或者表,或者某些列 TO 用户名;
92.撤销用户权限:REVOKE 允许的操作,如SELECT,INSERT等 ON 允许操作的对象,可以是整个数据库,或者表,或者某些列 FROM 用户名;注意:被撤销的权限必须存在,不然出错。
93.以下是可以授予或者撤销的权限:
94.注意:在授予或者撤销权限的时候,用户账号必须存在,但是权限所涉及的对象可以不存在,这样的话,你可以在创建表或数据库之前就设计好用户权限。但是请留心:只要以后再次创建与被授权对象相同的对象,那么该用户都拥有相应的权限对于那些对象。
95.可以在一条GRANT语句中授予用户多个权限,中间使用,隔开。
96.设置用户密码:SET PASSWORD FOR 用户名=Password(‘密码’); 如果直接使用 SET PASSWORD=Password( ‘ 密码 ’ );也就是说不指定用户名那么设置当前用户的密码。
97.当然你可以直接在user表中来进行添加用户,设置密码等操作,但是这样不安全。
98.用户名区分大小写。
99.如在创建了用户账号之后无法登陆,则把user表中的匿名用户删除。使用下列语句:
DELETE FROM mysql.user WHERE user=‘’;FLUSH PRIVILEGES;
100.在创建用户的时候比如你这样:CREATE USER TOM; 其实这句话的意思是:CREATE USER TOM@%; 说明这个账号可以在所有主机上登录,这是默认的。你也可以通过CREATE USER 用户名@主机;来指定该用户可以在哪些主机上登录。比如:TOM@localhost, 表示可以在本地主机登录。
101.在对用户账号进行操作时如果只用用户名,比如TOM,那么默认都是TOM@%,这样的话,如果你定义了一个用户为TOM@localhost,那么使用 DROP USER TOM,是无法删除用户TOM的,应该使用DROP USER TOM@localhost.
102.如果你之前没有创建一个用户账号,但是通过GRANT语句给该用户授权了,那么MySQL会自动产生一个该用户,所以在凡是用到用户账号的时候,都应该使用 TOM@LOCALHOST这种格式,防止发生混乱。所以说只是简单的用户名是无法区分用户账号的,需要包括主机名的完整用户账号。 但是在用MySQL语句登录用户的时候只需要简单的用户名,因为系统会自动为你加上@localhost。
102.使用SHOW PROCESSLIST;可以查看所有活动的进程