mysql 索引,视图,触发器

来源:互联网 发布:未来计价软件论坛 编辑:程序博客网 时间:2024/05/30 04:31

外键创建  CONSTRAINT 'fk'  FOREIGN KEY ('bookType')  REFERENCES  't_boolType' ('id')

                  constraint   '外键名字'  foreign key("要建立外键的字段名")   reference  "对应的表名"('表的字段')


例如:   表a 

            id        int  

            name   varchar

           age        varchar

和表b

           id     int

          address  varchar

          aid      int      外键字段

constraint   'fk  foreign key('aid')   reference  'a'(id')   这样就创建了a表和b表的外键关联了

左右连接查询

SELECT 属性名列表FROM 表名 1 LEFT|RIGHT JOIN表名 2 ON 表名1.属性名 1=表名2.属性名 2;
左连接查询:  可以查询出“表名 1”的所有记录,而“表名2”中,只能查询出匹配的记录;
有连接查询:  可以查询出“表名 2”的所有记录,而“表名1”中,只能查询出匹配的记录;



SELECT * FROM  users;

#排序
SELECT * FROM users GROUP BY username;

#字段去除重复数据
SELECT DISTINCT username FROM users;

#对查询结果进行去重:自己斟酌

#对查询结果进行排序  asc 升序  desc降序
SELECT id FROM users GROUP BY id ASC;
SELECT id FROM users GROUP BY id DESC;

#group by 的使用
SELECT username,GROUP_CONCAT(PASSWORD) FROM users GROUP BY username;

#WITH ROLLUP 最后假如一个总行数
SELECT username,COUNT(PASSWORD) FROM users GROUP BY username WITH ROLLUP;

#分页查询 起始行,结束行   语法:SELECT 字段 1,字段 2...FROM 表名 LIMIT 初始位置,记录数;
SELECT * FROM users LIMIT 0,5;
SELECT * FROM users LIMIT 5,5;
SELECT * FROM users LIMIT 10,5;

#Exists  假如子查询查询到记录,则进行外层查询,否则,不执行外层查询;  
SELECT username FROM users WHERE EXISTS(SELECT * FROM users WHERE id=1);

#Any 和 All的用法和Exists 类似

#使用 UNION 关键字是,数据库系统会将所有的查询结果合并到一起,然后去除掉相同的记录;
SELECT id FROM users UNION SELECT id FROM t_user;

#使用 UNION ALL,不会去除掉系统的记录;
SELECT id FROM users UNION ALL SELECT id FROM t_user;

#索引**********************************************************

#在已经存在的表上创建索引
#CREATE [ UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名
#ON 表名 (属性名 [(长度)] [ ASC | DESC]);                 
CREATE     INDEX index_userName ON t_user4(userName);

#用 ALTER TABLE 语句来创建索引
#ALTER TABLE 表名 ADD [ UNIQUE | FULLTEXT | SPATIAL ] INDEX
#索引名 (属性名 [(长度)] [ ASC | DESC]);
ALTER TABLE t_user5 ADD INDEX index_userName(userName);

#创建多列索引
CREATE  INDEX index_userName_password ON t_user4(userName,PASSWORD);

#删除索引 DROP INDEX 索引名 ON 表名 ;
DROP INDEX index_userName ON t_user5;

#视图**********************************************************

#CREATE [ ALGORITHM ={ UNDEFIEND | MERGE | TEMPTABLE }]
#VIEW 视图名 [ ( 属性清单) ]
#AS SELECT 语句
#[ WITH [ CASCADED | LOCAL ] CHECK OPTION ];
CREATE VIEW v1 AS SELECT * FROM t_book;

#CREATE [ ALGORITHM ={ UNDEFIEND | MERGE | TEMPTABLE }]
#VIEW 视图名 [ ( 属性清单) ]
#AS SELECT 语句
#[ WITH [ CASCADED | LOCAL ] CHECK OPTION ];
CREATE VIEW v1 AS SELECT * FROM t_book;


#在 views 表中查看视图详细信息
#DESCRIBE 语句查看视图基本信息
DESC v5;
SHOW TABLE STATUS LIKE 'v5';

#SHOW TABLE STATUS 语句查看视图基本信息
SHOW TABLE STATUS LIKE 't_book';

#SHOW CREATE VIEW 语句查看视图详细信息
SHOW CREATE VIEW v5;


#触发器*********************************************************


#创建只有一个执行语句的触发器  new 过度变量(指的是新插入的)
#CREATE TRIGGER 触发器名 BEFORE | AFTER 触发事件 ON 表名 FOR EACH ROW 执行语句
CREATE TRIGGER trig_book AFTER INSERT
     ON t_book FOR EACH ROW
        UPDATE t_bookType SET bookNum=bookNum+1 WHERE new.bookTypeId=t_booktype.id;
        
        
INSERT INTO t_book VALUES(NULL,'java好',100,'ke',1);



#创建有多个执行语句的触发器  old过度变量(指的是删除的)
#CREATE TRIGGER 触发器名 BEFORE | AFTER 触发事件 ON 表名 FOR EACH ROW
#BEGIN
#  执行语句列表
#END
DELIMITER |
CREATE TRIGGER trig_book2 AFTER DELETE
    ON t_book FOR EACH ROW
    BEGIN
       UPDATE t_bookType SET bookNum=bookNum-1 WHERE old.bookTypeId=t_booktype.id;
       INSERT INTO t_log VALUES(NULL,NOW(),'在book表里删除了一条数据');
       DELETE FROM t_test WHERE old.bookTypeId=t_test.id;
    END
|
DELIMITER ;

#查看触发器
SHOW TRIGGERS;
//删除触发器  DROP TRIGGER 触发器名;
DROP TRIGGER trig_book2 ;



阅读全文
0 0
原创粉丝点击