1.mysql中文字太多用text不用varchar(可变长,即可以根据实际的长度分配空间)。
2.数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。看成个仓库。
3.用命令行的方式进入到mysql是:cd+空格+文件夹的名字(C:\Program Files (x86)\MySQL\MySQL Server 5.1\bin,这是安装mysql的位置,如果不是c盘,比如d盘,要先切换到d盘,用d:),然后输入mysql -u root -p(每个单词之间必须有空格),然后
输入mysql的密码(输入密码前先从服务里面把mysql打开,不然会报错说无法连接),我的是6543210,就会出现mysql>,然后就可以写sql语句了。
如果不想出现输入密码的界面,就输入mysql -u root ,然后输入select host,user,password from mysql.user;可以查看mysql的密码,整了半天,我笔记本mysql的密码竟然是空,真是醉了。
比如,show databases;drop database db_book;create database db_book;(数据库的命名规范,用db_开头,注意create别漏掉e).
4.表是数据库存储数据的基本单位,一个表包含若干个字段或记录。
一个字段一行,看起来方便。
创建图书类别表t_bookType
CREATE TABLE t_bookType(
id int primary key auto_increment,
bookTypeName varchar(20),
bookTypeDesc varchar(200)
);
虽然已经创建了数据库db_book了,但在把建表语句粘贴进去之前(先在文本中写,在粘贴到命令行,因为在命令行写错了就没法删了),要先执行use db_book;
(这个作为外键,与表t_bookType里的id 关联)
创建图书表t_book
CREATE TABLE t_book(
id int primary key auto_increment,
bookName varchar(20),
author varchar(10).
price decimal(6,2),
bookTypeId int,
constraint `fk` foreign key (`bookTypeId`) references `t_bookType`(`id`)
);
注意上面的不是单引号,是tab键上面的,这是mysql的要求。
单词回忆:increment(增量),constraint(约束),concat(合并)
desc t_bookType可以查看表结构。
show create table t_bookType;可以查看更加详细的表信息,包括sql语句。
5.修改表:
修改表名:alter table t_bookType rename t_booktype2;
修改字段:alter table t_bookType2 bookTypeName bookTypeName2 varchar(20);
比如,show databases;drop database db_book;create database db_book;(数据库的命名规范,用db_开头,注意create别漏掉e).
4.表是数据库存储数据的基本单位,一个表包含若干个字段或记录。
一个字段一行,看起来方便。
创建图书类别表t_bookType
CREATE TABLE t_bookType(
id int primary key auto_increment,
bookTypeName varchar(20),
bookTypeDesc varchar(200)
);
虽然已经创建了数据库db_book了,但在把建表语句粘贴进去之前(先在文本中写,在粘贴到命令行,因为在命令行写错了就没法删了),要先执行use db_book;
(这个作为外键,与表t_bookType里的id 关联)
创建图书表t_book
CREATE TABLE t_book(
id int primary key auto_increment,
bookName varchar(20),
author varchar(10).
price decimal(6,2),
bookTypeId int,
constraint `fk` foreign key (`bookTypeId`) references `t_bookType`(`id`)
);
注意上面的不是单引号,是tab键上面的,这是mysql的要求。
单词回忆:increment(增量),constraint(约束),concat(合并)
desc t_bookType可以查看表结构。
show create table t_bookType;可以查看更加详细的表信息,包括sql语句。
5.修改表:
修改表名:alter table t_bookType rename t_booktype2;
修改字段:alter table t_bookType2 bookTypeName bookTypeName2 varchar(20);
6.查询的时候,where stuname like '张三%'或者'张三_'或者'%张三%'模糊查询要会。 其中,%代表任意字符,_代表单个字符。
查询空值:select 字段1,字段2 from 表名 where 字段 is null;
与GROUP_CONCAT合并函数一起使用
SELECT gradeName,GROUP_CONCAT(stuName) FROM t_student GROUP BY gradeName;
聚合函数count(聚合函数一共五个,分别是count(),sum(),avg(),
max(),min())
SELECT COUNT(*) AS tatal FROM t_grade; 用别名,最后结果中就是total为多少了。
1>SELECT stuName,course,MAX(score) FROM t_grade WHERE stuName="张三";
2>SELECT stuName,MAX(score) FROM t_grade GROUP BY stuName;(用group by 的时候,就不能像1>那样来写course了,因为只能按一个来分组)
2>SELECT stuName,MAX(score) FROM t_grade GROUP BY stuName;(用group by 的时候,就不能像1>那样来写course了,因为只能按一个来分组)
分组查询:
SELECT gradeName,(这个逗号不要漏掉)COUNT(stuName) FROM t_student GROUP BY gradeName;
SELECT gradeName,(这个逗号不要漏掉)COUNT(stuName) FROM t_student GROUP BY gradeName;
分页查询limit从第几页开始,共几页
SELECT * FROM t_student LIMIT 0,5;
SELECT * FROM t_student LIMIT 5,5;
SELECT gradeName,COUNT(stuName)(聚合函数用来统计个数) FROM t_student GROUP BY gradeName HAVING COUNT(stuName)>3;
SELECT * FROM t_student LIMIT 0,5;
SELECT * FROM t_student LIMIT 5,5;
SELECT gradeName,COUNT(stuName)(聚合函数用来统计个数) FROM t_student GROUP BY gradeName HAVING COUNT(stuName)>3;
SELECT gradeName,COUNT(stuName) FROM t_student GROUP BY gradeName WITH ROLLUP;(统计总的个人)
SELECT * FROM t_student LIMIT 0,5;(分页查询,select 字段1,地段2....from 表名 limit 初始位置,记录数;)
7.在工具SQLyog中写sql语句时,需要执行哪一句sql语句,就选中哪句执行就好了。
8.sql语句,建表的时候那种字段,都不是单引号?都是tab键上面的那个符号?但value里面好像是单引号
9.SELECT id,stuName,age,sex,gradeName FROM t_student;
SELECT * FROM t_student;
上面这两种都是查询所有的语句,区别是第一种可以更改顺序,比如在表结构中希望哪个在第一列就放哪个在最前面。
11.点击+里的架构设计器,然后看主外键的关系,拖动。
12.SELECT * FROM t_book t WHERE t.id=1;这是为表t_book取别名为t。
SELECT t.bookName AS bName FROM t_book t WHERE t.id=1; 为字段取别名,as可以省略,但为了清晰,还是写上吧。
插入数据:
INSERT INTO t_book(id,bookName,price,author,bookTypeId) VALUES (NULL,'我爱我家2',20,'张三',1),(NULL,'我爱我家3',20,'张三',1);
更新数据;
UPDATE t_book SET bookName='Java编程思想',price=120 WHERE id=1;
UPDATE t_book SET bookName='我' WHERE bookName LIKE '%我爱我家%';
UPDATE t_book SET bookName='我' WHERE bookName LIKE '%我爱我家%';
13.索引:
索引定义:索引是由数据库表中的一列或者多列组合而成,其作用是提高对表中数据
的查询速度,类似于图书的目录,方便快速定位,寻找指定的内容。优点:提高
查询数据的速度;缺点:创建和维护索引的时间增加了。
创建单列索引:
CREATE TABLE t_user (id INT,
username VARCHAR(20),
PASSWORD VARCHAR(20),
INDEX (username)
username VARCHAR(20),
PASSWORD VARCHAR(20),
INDEX (username)
);
14.视图:
视图是一种虚拟的表,是从数据库中一个或者多个表中导出来的表;数据库中只存放了
视图的定义,而并没有存放视图中的数据,这些数据存放在原来的表中。
使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。
视图的作用:
使操作简便化;增加数据的安全性;提高表的逻辑独立性。
创建视图:
CREATE VIEW v2 AS SELECT bookName,price FROM t_book;
CREATE VIEW v2(b,p) AS SELECT bookName,price FROM t_book;这样,bookName和price的名字就变成了b和p。
视图是虚表,默认不准改。
多表视图:
CREATE VIEW v4 AS SELECT bookName,bookTypeName FROM t_book,t_booktype WHERE t_book.bookTypeId=t_booktype.id;
建议用别名:CREATE VIEW v5 AS SELECT tb.bookName,tby.bookTypeName FROM t_book tb,t_booktype tby WHERE tb.bookTypeId=tby.id;
查看视图v1:DESC v1;
SHOW TABLE STATUS LIKE 'v1';这样查到的信息可以看到除了名字,其他均为空,说明是虚表。
SHOW CREATE VIEW v1;可以查出建表的详细信息,包括编码啥的。
对视图进行更新其实就是对表进行更新。删除视图时,不会影响数据。
DROP VIEW IF EXISTS v1;删除视图。
触发器(trigger)是由事件来出发某个操作。这些事件包括insert语句,
update语句和delete语句。当数据库系统执行这些事件时,就会
激活触发器执行相应的操作。
通过触发器可以实现比如往t_book里面insert一条数据,在t_booktype里面的数量就会相应的增加。
1.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);
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);
2、delimiter 是分界符,不然执行的时候遇到;就会结束执行了。
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 ;
DELETE FROM t_book WHERE id=5;
SHOW TRIGGERS;
DROP TRIGGER trig_book2 ;
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 ;
DELETE FROM t_book WHERE id=5;
SHOW TRIGGERS;
DROP TRIGGER trig_book2 ;
15.mysql的常用函数有个手册,需要用什么的时候去查。
16.加密函数:
1.password(str),一般是对用户的密码加密,不可逆(加密后,不可还原)
2.MD5(str) 普通加密,不可逆。
3.encode(str,pswd_str),加密函数,结果是一个二进制数,必须使用BLOB类型的
字段来保存它。
4.decode(crypt_str,pswd_str)解密函数。
INSERT INTO t_t VALUES(NULL,'2013-1-1','a',1,MD5('123456'));
INSERT INTO t_t VALUES(NULL,'2013-1-1','a',1,MD5('123456'),ENCODE('abcd','aa'));aa类似于一把钥匙。
SELECT DECODE(pp,'aa') FROM t_t WHERE id=5;
INSERT INTO t_t VALUES(NULL,'2013-1-1','a',1,MD5('123456'),ENCODE('abcd','aa'));aa类似于一把钥匙。
SELECT DECODE(pp,'aa') FROM t_t WHERE id=5;
INSERT INTO t_t VALUES(NULL,'2022-02-09','caofwe',2,PASSWORD('6543210'));得到的密码就是这种*2437A328FF22FC8D4C8。
17.存储过程和函数
存储过程和函数是在数据库中定义的一些SQL语句的集合,然后
直接调用这些存储过程和函数来执行已经定义好的SQL语句。存储
过程和函数可以避免开发人员重复的编写相同的SQL语句。而且,
存储过程和函数是在MySQL服务器中存储和执行的,可以减少客户端和服务器
的数据传输。
DELIMITER &&
CREATE PROCEDURE pro_book ( IN bT INT,OUT count_num INT)
READS SQL DATA
BEGIN
SELECT COUNT(*) FROM t_book WHERE bookTypeId=bT;
END
&&
DELIMITER ;
CALL pro_book(1,@total);调用存储过程
CREATE PROCEDURE pro_book ( IN bT INT,OUT count_num INT)
READS SQL DATA
BEGIN
SELECT COUNT(*) FROM t_book WHERE bookTypeId=bT;
END
&&
DELIMITER ;
CALL pro_book(1,@total);调用存储过程
DELIMITER &&
CREATE FUNCTION func_book (bookId INT)
RETURNS VARCHAR(20)
BEGIN
RETURN ( SELECT bookName FROM t_book WHERE id=bookId );
END
&&
DELIMITER ;
SELECT func_book(2);调用函数