常用的数据类型
int:整型
varchar(n):可变长度的char
datetime:时间
float(m,d): 共有m位数,少数点后有d位
test:最多可以存65535个数
数据库操作(CRUD)
C:create,R:read,U:update,D:delete
具体操作:
INSERT INTO table_name(列1,列2) VALUES(值1,值2)
SELECT */列名称 FROM 表名称
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
DELET FROM 表名称 WHERE 列名称 = 值(实际上公司的开发中,数据库从来不删除DELETE数据,而是用状态字段表示用户采取的措施)。
不区分大小写
在windows中所有指令不区分大小写
如图所示:
create==CREate且aa==AA
不建议用*查询所有字段
在workbench中用指令操作数据库:
1 insert into first_db.user(name, password) values(\'yulang\', \'123456\'); 2 SELECT * FROM first_db.user;
在实际工作中不要用*,因为数据库有很多列,读取所有列需要占用很大一部分网速。
结果显示:
select语句进阶
如下:
1 //选出某几列 2 SELECT {COLA, COLB, *} FROM {TABLE} 3 //只有满足CONDITION条件才显示 4 WHERE {CONDITION} 5 //每一行按照某列的大小升序,或降序(desc)排列 6 ORDER BY {COL} DESC 7 //取出一定数目的行,OFF表示偏移量,COUNT表示取出的行数 8 LIMIT {OFF},{COUNT}
扩展
condition表达式可以包含一些运算符,例如:
1.>, <, ==等比较运算符。
2.in。例子:id in (1, 5, 6) 表示id为1或者5或者6。
3. and等逻辑运算符。
4.between。例子:id between 2 and 5;表示在id在[2,5]中。
代码:
1 #insert into first_db.user(id,name, password) values(1,\'a1\', \'b1\'); 2 #insert into first_db.user(id,name, password) values(2,\'a2\', \'b2\'); 3 #insert into first_db.user(id,name, password) values(3,\'a3\', \'b3\'); 4 #insert into first_db.user(id,name, password) values(4,\'a4\', \'b4\'); 5 #insert into first_db.user(id,name, password) values(5,\'a5\', \'b5\'); 6 #insert into first_db.user(id,name, password) values(6,\'a6\', \'b6\'); 7 #SELECT * FROM first_db.user; 8 SELECT * FROM first_db.user where id > 2; 9 SELECT * FROM first_db.user where id in (3, 4, 5, 6); 10 SELECT * FROM first_db.user where id > 2 and id <= 6; 11 SELECT * FROM first_db.user where id between 3 and 6;
它们的结果都一样:
还可以使用函数:
例如:count()等函数。
SELECT count(id) FROM first_db.user where id > 2;
结果显示:
大综合:
SELECT * FROM first_db.user where id between 1 and 6 order by id desc limit 2, 3;
按id降序查询[1,6]的记录,并且偏移量为2,取3条记录。
显示结果:
Mysql中遇到的坑
1.把反引号` `误认为时单引号\' \'
例如:
而我写成了:
1 DROP TABLE IF EXISTS \'user\'; 2 CREATE TABLE \'user\' ( 3 \'id\' int(11) unsigned NOT NULL AUTO_INCREMENT, 4 \'name\' varchar(64) NOT NULL DEFAULT \' \', 5 \'password\' varchar(128) NOT NULL DEFAULT \' \', 6 \'salt\' varchar(32) NOT NULL DEFAULT \' \', 7 \'head_url\' varchar(256) NOT NULL DEFAULT \' \', 8 PRIMARY KEY (\'id\'), 9 UNIQUE KEY \'name\' (\'name\') 10 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
报错:16:30:06 DROP TABLE IF EXISTS \'user\' Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'\'user\'\' at line 1 0.000 sec各种查资料,结果都不能解释,最后才知道原来这是反引号!!!
反引号的作用:当有些字段的名字跟关键字的名字相同,用反引号可以避免发生错误。
修改后:
1 DROP TABLE IF EXISTS `user`; 2 CREATE TABLE `user` ( 3 `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 4 `name` varchar(64) NOT NULL DEFAULT \' \', 5 `password` varchar(128) NOT NULL DEFAULT \' \', 6 `salt` varchar(32) NOT NULL DEFAULT \' \', 7 `head_url` varchar(256) NOT NULL DEFAULT \' \', 8 PRIMARY KEY (`id`), 9 UNIQUE KEY `name` (`name`) 10 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
使用脚本后,可以使用右键数据库Refresh All,参看数据库的修改。