操作表与操作表数据行

一. 操作表
		增 
			语法:
				create table 表名(
					字段名  列类型 [可选的参数],  ### 记住加逗号
					字段名  列类型 [可选的参数],  ### 记住加逗号
					字段名  列类型 [可选的参数]  ### 最后一行不加逗号
					.....
				)charset=utf8;  #### 后面加分号
			
			列约束:(*********************)
				
					auto_increment :  自增 1
					primary key : 主键索引,加快查询速度, 列的值不能重复
					NOT NULL    标识该字段不能为空
					DEFAULT    为该字段设置默认值
			
					例子1:
						create table t1(
							id int,
							name char(5)
						)charset=utf8;
					
						Query OK, 0 rows affected (0.72 sec)   #### 如果回显是queryok,代表创建成功
						
						增加数据:
							语法:
								insert into 表名 (列1, 列2) values (值1,'值2');
							例子:
								insert into t1 (id, name) values (1, 'zekai');
								insert into t1 (id, name) values (1, 'zekai2');
						查询数据:
							语法:
								select 列1, 列2 from 表名;  (*代表查询所有的列)
							例子:
							mysql> select * from t1;
							+------+-------+
							| id   | name  |
							+------+-------+
							|    1 | zekai |
							+------+-------+
							1 row in set (0.00 sec)
					
					例子2:
						
						create table t2(
							id int auto_increment primary key,
							name char(10) 
						)charset=utf8;
						
						
						

							insert into t2 (name) values ('zekai1');
						
					例子3: (推荐)
						create table t3(
							id  int unsigned auto_increment primary key,
							name char(10) not null default 'xxx',
							age int not null default 0
						)charset=utf8;
						
						mysql> insert into t3 (age) values (10);
						Query OK, 1 row affected (0.05 sec)
							
						mysql> select * from t3;
						+----+------+-----+
						| id | name | age |
						+----+------+-----+
						|  1 | xxx  |  10 |
						+----+------+-----+
					
			
			列类型: (********************)
			
				create table 表名(
					字段名  列类型 unsigned [可选的参数],  ### 记住加逗号
					字段名  列类型 [可选的参数],  ### 记住加逗号
					字段名  列类型 [可选的参数]  ### 最后一行不加逗号
					.....
				)charset=utf8;  #### 后面加分号
				
				- 数字
					- 整型
						tinyint
						smallint
						int   (************************) 推荐使用
						mediumint
						bigint
						
						a.整数类型
						b.取值范围
						c.unsigned  加上代表不能取负数  只适用于整型
						
						应用场景:
							根据公司业务的场景,来选取合适的类型
											
					- 浮点型 (***********)
						create table t5(
							id int auto_increment primary key,
							salary decimal(16,10),
							num float
						)charset=utf8;
						
						float:  不一定精确 
						decimal: 非常的精确的数字 (5000.23)  decimal(6, 2) m是数字总个数(负号不算),d是小数点后个数。
						
						正好 10 位:
						mysql> insert into t5 (salary, num) values (500023.2312345678, 5000.2374837284783274832);
						Query OK, 1 row affected (0.04 sec)

						mysql> select * from t5;
						+----+-------------------+---------+
						| id | salary            | num     |
						+----+-------------------+---------+
						|  1 | 500023.2312345678 | 5000.24 |
						+----+-------------------+---------+
						1 row in set (0.00 sec)
						
						少于10位:
						mysql> insert into t5 (salary, num) values (500023.231234567, 5000.2374837284783274832);
						Query OK, 1 row affected (0.04 sec)

						mysql> select * from t5;
						+----+-------------------+---------+
						| id | salary            | num     |
						+----+-------------------+---------+
						|  1 | 500023.2312345678 | 5000.24 |
						|  2 | 500023.2312345670 | 5000.24 |
						+----+-------------------+---------+
						
						多于10位:
						mysql> insert into t5 (salary, num) values (500023.23123456789, 5000.2374837284783274832);
						Query OK, 1 row affected, 1 warning (0.03 sec)

						mysql> select * from t5;
						+----+-------------------+---------+
						| id | salary            | num     |
						+----+-------------------+---------+
						|  1 | 500023.2312345678 | 5000.24 |
						|  2 | 500023.2312345670 | 5000.24 |
						|  3 | 500023.2312345679 | 5000.24 |
						+----+-------------------+---------+

				- 字符串
					
					- char(长度) : 定长
						create table t6(
							id unsigned int auto_increment primary key,
							name char(10) not null default 'xxx',
						)charset=utf8;
						
						
					- varchar(长度):变长
						create table t6(
							id  int auto_increment primary key,
							name varchar(10) not null default 'xxx'
						)charset=utf8;
					
					mysql> insert into t6 (name) values ('hello');
					Query OK, 1 row affected (0.03 sec)

					mysql> select * from t6;
					+----+-------+
					| id | name  |
					+----+-------+
					|  1 | hello |
					+----+-------+
					1 row in set (0.00 sec)

					mysql> insert into t6 (name) values ('hellodbsabdsjabjdsa');
					ERROR 1406 (22001): Data too long for column 'name' at row 1
					
					区别:
						char: 定长, 无论插入的字符是多少个,永远固定占规定的长度
						场景:
							1. 身份证
							2. 手机号 char(11)
							3. md5加密之后的值,比如密码 等 char(32)
						
						varchar: 变长, 根据插入的字符串的长度来计算所占的字节数,但是有一个字节是用来保存字符串的大小的
						
						注意:如果, 不能确定插入的数据的大小, 一般建议使用 varchar(255)
									
				- 时间日期类型
					YEAR
						YYYY(1901/2155)

					DATE
						YYYY-MM-DD(1000-01-01/9999-12-31)

					TIME
						HH:MM:SS('-838:59:59'/'838:59:59')

					DATETIME  (***************************)

						YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59    Y)

					TIMESTAMP

						YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时)
					
					例子:
						create table t8(
							d date,
							t time,
							dt datetime
						);	
						mysql> insert into t8 values(now(),now(),now());
						Query OK, 1 row affected, 1 warning (0.08 sec)

						mysql> select * from t8;
						+------------+----------+---------------------+
						| d          | t        | dt                  |
						+------------+----------+---------------------+
						| 2019-10-29 | 10:49:51 | 2019-10-29 10:49:51 |
						+------------+----------+---------------------+
						1 row in set (0.00 sec)
						insert into t8 values(now(),now(),now());
				
				- 枚举
					列出所有的选项
					
					create table t9 (
						id int auto_increment primary key,
						gender enum('male','female')
					)charset utf8;
					
					mysql> insert into t9 (gender) values ('male');
					Query OK, 1 row affected (0.04 sec)

					mysql> insert into t9 (gender) values ('female');
					Query OK, 1 row affected (0.03 sec)

					mysql> insert into t9 (gender) values ('dshajjdsja');
			
			
		
		改
			1. 修改表名
				ALTER TABLE 旧表名 RENAME 新表名;
				
				mysql> alter table t8 rename t88;
				Query OK, 0 rows affected (0.19 sec)
				
			2. 增加字段
				ALTER TABLE 表名
				ADD 字段名 列类型 [可选的参数],
				ADD 字段名 列类型 [可选的参数];
				
				mysql> alter table t88 add name varchar(32) not null default '';
				Query OK, 0 rows affected (0.82 sec)
				Records: 0  Duplicates: 0  Warnings: 0
				
				上面添加的列永远是添加在最后一列之后
				
			
				ALTER TABLE 表名
				ADD 字段名 列类型 [可选的参数] FIRST;
				
				mysql> alter table t88 add name3 varchar(32) not null default '' first;
				Query OK, 0 rows affected (0.83 sec)
				Records: 0  Duplicates: 0  Warnings: 0
				
				
				ALTER TABLE 表名
				ADD 字段名 列类型 [可选的参数] AFTER 字段名;
				mysql> alter table t88 add name4 varchar(32) not null default '' after d;
				Query OK, 0 rows affected (0.68 sec)
				Records: 0  Duplicates: 0  Warnings: 0
				
			3. 删除字段
				ALTER TABLE 表名  DROP 字段名;
				
				mysql> alter table t88 drop name4;
				Query OK, 0 rows affected (0.66 sec)
				Records: 0  Duplicates: 0  Warnings: 0

			4. 修改字段
				ALTER TABLE 表名 MODIFY 字段名 数据类型 [完整性约束条件…];
				
				mysql> alter table t88 modify name2 char(20);
				Query OK, 1 row affected (0.88 sec)
				Records: 1  Duplicates: 0  Warnings: 0
				
				
				ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];
				
				mysql> alter table t88 change name2 name22 varchar(32) not null default '';
				Query OK, 1 row affected (0.82 sec)
				Records: 1  Duplicates: 0  Warnings: 0	
				
				mysql> alter table t88 change name22 name23;
				ERROR 1064 (42000): 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 '' at line 1
				
		删
			drop table 表名;  #### 线上禁用
			mysql> drop table t9;
			Query OK, 0 rows affected (0.18 sec)
		查
			mysql> show tables;
			+----------------+
			| Tables_in_test |
			+----------------+
			| t1             |
			+----------------+
			1 row in set (0.00 sec)
		
		复制表结构:
			mysql> ## 1. 查看t88表的创建语句
			mysql> show create table t88;
			+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
			| Table | Create Table                                                                                                                                                                                                                                                              |
			+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
			| t88   | CREATE TABLE `t88` (
			  `name3` varchar(32) NOT NULL DEFAULT '',
			  `d` date DEFAULT NULL,
			  `t` time DEFAULT NULL,
			  `dt` datetime DEFAULT NULL,
			  `name` varchar(32) NOT NULL DEFAULT '',
			  `name22` varchar(32) NOT NULL DEFAULT ''
			) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
			+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
			1 row in set (0.01 sec)
			
			mysql> ## 2. like
			mysql> create table t89 like t88;
			Query OK, 0 rows affected (0.33 sec)
						

二. 操作表数据行:
		增 
			增加数据:
				语法:
					insert into 表名 (列1, 列2) values (值1,'值2');
				例子:
					insert into t1 (id, name) values (1, 'zekai');
					insert into t1 (id, name) values (1, 'zekai2');
					insert into t1 (id, name) values (1, 'zekai2'),(2, 'zekai3'),(3,'zekai4');
					
					mysql> insert into t66 (name) select name from t6;
					Query OK, 4 rows affected (0.09 sec)
					Records: 4  Duplicates: 0  Warnings: 0
				
				
		删
			delete from 表名 where 条件;
				mysql> delete from t5 where id=1;
				mysql> delete from t5 where id>1;
				mysql> delete from t5 where id>=1;
				mysql> delete from t5 where id<1;
				mysql> delete from t5 where id<=1;
				mysql> delete from t5 where id>=1 and id<10;
				Query OK, 1 row affected (0.06 sec)
				
				delete from 表名; 删除表中所有的数据
				
				mysql> insert into t5 (salary, num) values (500023.2312345679,  5000.24);
				Query OK, 1 row affected (0.08 sec)

				mysql> select * from t5;
				+----+-------------------+---------+
				| id | salary            | num     |
				+----+-------------------+---------+
				|  4 | 500023.2312345679 | 5000.24 |
				+----+-------------------+---------+
				1 row in set (0.00 sec)
			
			truncate 表名; #### 没有where条件的
				mysql> truncate t5;
				Query OK, 0 rows affected (0.25 sec)

				mysql> select * from t5;
				Empty set (0.00 sec)

				mysql> insert into t5 (salary, num) values (500023.2312345679,  5000.24);
				Query OK, 1 row affected (0.06 sec)

				mysql> select * from t5;
				+----+-------------------+---------+
				| id | salary            | num     |
				+----+-------------------+---------+
				|  1 | 500023.2312345679 | 5000.24 |
				+----+-------------------+---------+
				1 row in set (0.00 sec)
			
			区别:	
				1. delete之后,插入数据从上一次主键自增加1开始, truncate则是从1开始
				2. delete删除, 是一行一行的删除, truncate:全选删除 truncate删除的速度是高于delete的
				
				
			
		改
			update 表名 set 列名1=新值1,列名2=新值2 where 条件;
				mysql> update t66 set name='xxxx' where id=30;
				Query OK, 1 row affected (0.04 sec)
				Rows matched: 1  Changed: 1  Warnings: 0
			
				mysql> update t66 set name='xxxx' where id<30;
				mysql> update t66 set name='xxxx' where id<=30;
				mysql> update t66 set name='xxxx' where id>=30;
				mysql> update t66 set name='xxxx' where id>30;
				mysql> update t66 set name='xxxx' where id>20 and id<32;
				mysql> update t66 set name='xxxx' where id>20 or name='zekai';
				
				Query OK, 1 row affected (0.04 sec)
				Rows matched: 1  Changed: 1  Warnings: 0
			
			
		查	
			
			语法:
				select 列1, 列2 from 表名;  (*代表查询所有的列)
				select * from 表名;  (*代表查询所有的列)
				select * from t66 where id>30 and id<40;
				select * from t66 where id>30;
				select * from t66 where id<30;
				select * from t66 where id<=30;
				select * from t66 where id>=30;
				select * from t66 where id!=30;
				select * from t66 where id<>30;
					mysql> select * from t1;
					+------+-------+
					| id   | name  |
					+------+-------+
					|    1 | zekai |
					+------+-------+
					1 row in set (0.00 sec)	
				
				between..and...: 取值范围是闭区间
					
					select * from t66 where id between 30 and 40;
					mysql> select * from t66 where id between 31 and 33;
					+----+--------+
					| id | name   |
					+----+--------+
					| 31 | dsadsa |
					| 32 | dsadsa |
					| 33 | dsadsa |
					+----+--------+
				
				避免重复DISTINCT
					mysql> select distinct name from t66;
					+--------+
					| name   |
					+--------+
					| xxxx   |
					| hds    |
					| dsadsa |
					+--------+
					3 rows in set (0.00 sec)
					
				通过四则运算查询 (不要用)
					mysql> select name, age*10 from t3;
					+------+--------+
					| name | age*10 |
					+------+--------+
					| xxx  |    100 |
					+------+--------+
					1 row in set (0.01 sec)

					mysql> select name, age*10 as age from t3;
					+------+-----+
					| name | age |
					+------+-----+
					| xxx  | 100 |
					+------+-----+
					1 row in set (0.02 sec)
					
				in(80,90,100):
					
					mysql> select * from t66 where id in (23,34,11);
					+----+------+
					| id | name |
					+----+------+
					| 11 | xxxx |
					| 23 | hds  |
					+----+------+
					2 rows in set (0.04 sec)
					
				like : 模糊查询
					以x开头:
						mysql> select * from t66 where name like 'x%';
						+----+------+
						| id | name |
						+----+------+
						|  1 | xxxx |
						|  2 | xxxx |
						|  3 | xxxx |
						|  4 | xxxx |
						|  8 | xxxx |
						|  9 | xxxx |
						| 10 | xxxx |
						| 11 | xxxx |
						| 15 | xxxx |
						| 16 | xxxx |
						| 17 | xxxx |
						| 18 | xxxx |
						| 30 | xxxx |
						+----+------+
						13 rows in set (0.05 sec)
						
					以x结尾:
						mysql> select * from t66 where name like '%x';
						+----+------+
						| id | name |
						+----+------+
						|  1 | xxxx |
						|  2 | xxxx |
						|  3 | xxxx |
						|  4 | xxxx |
						|  8 | xxxx |
						|  9 | xxxx |
						| 10 | xxxx |
						| 11 | xxxx |
						| 15 | xxxx |
						| 16 | xxxx |
						| 17 | xxxx |
						| 18 | xxxx |
						| 30 | xxxx |
						+----+------+
						13 rows in set (0.00 sec)
					
					包含x的:
						mysql> select * from t66 where name like '%x%';
posted @ 2019-10-29 21:06  哥$  阅读(275)  评论(0编辑  收藏  举报