学习MySQL之表操作
一、创建数据表
CREATE TABLE table_name(column_name column_type);
一下例子中我们将在Test数据库中创建表Student:
CREATE TABLE IF NOT EXISTS `Student`(
`ID` INT UNSIGNED AUTO_INCREMENT,
`NAME` VARCHAR(100) NOT NULL,
`CLASS` VARCHAR(40) NOT NULL,
PRIMARY KEY ( `ID` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
解析:
- 如你不想字段为NULL,可以设置字段的属性为NOT NULL,在操作数据库时如果输入该字段的数据为NULL,就会报错。
- AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。
- PRIMARY KEY关键字用于定义主键。您可以使用多列来定义主键,列间以逗号分隔。
- ENGINE设置存储引擎,CHARSET设置编码。
root@host# mysql -u root -p
Enter password:*******
mysql> use Test;
Database changed
mysql> CREATE TABLE Student(
-> ID INT NOT NULL AUTO_INCREMENT,
-> NAME VARCHAR(100) NOT NULL,
-> CLASS VARCHAR(40) NOT NULL,
-> PRIMARY KEY ( runoob_id )
-> )ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.16 sec)
mysql>
**注意:**MySQL命令终止符为分号 ; 。
注意: -> 是换行符标识,不要复制。
二、删除数据表
DROP TABLE table_name;
以下是删除Test数据库中数据表Student的实例:
root@host# mysql -u root -p
Enter password:*******
mysql> use Test;
Database changed
mysql> DROP TABLE Student
Query OK, 0 rows affected (0.8 sec)
mysql>
三、插入数据
INSERT INTO table_name(cloumn1,cloumn2,...,cloumnN)
VALUES
(value1,value2,...,valueN);
以下是向Student表中插入一条数据的实例:
root@host# mysql -u root -p password;
Enter password:*******
mysql> use Test;
Database changed
mysql> INSERT INTO Student
-> (ID, NAME, CLASS)
-> VALUES
-> (1001, "张三", "三年一班");
Query OK, 1 rows affected, 1 warnings (0.01 sec)
mysql>
注意:使用箭头标记->
不是SQL语句的一部分,它仅仅表示一个新行,如果一条SQL语句太长,我们可以通过回车键来创建一个新行来编写SQL语句,SQL语句的命令结束符为分号;
。
四、删除数据
当你想删除数据表中指定的记录是,WHERE子句是非常有用的。
DELETE FROM table_name [WHERE Clause]
- 如果没有指定WHERE子句,MySQL表中的所有记录都将被删除。
- 你可以在WHERE子句中指定任何条件。
- 你可以在单个表中一次性删除记录
mysql> use Test;
Database changed
mysql> DELETE FROM Student WHERE NAME="张三";
Query OK, 1 row affected (0.23 sec)
五、修改数据
UPDATE table_name SET field1=new-value1,field2=new-value2
[WHERE Clause]
- 你可以同时更新一个或多个字段。
- 你可以在WHERE子句中指定任何条件。
- 你可以在一个单独表中同时更新数据
mysql> UPDATE Student SET NAME="李四" WHERE ID=1001;
Query OK, 1 rows affected (0.01 sec)
mysql> SELECT * from Student WHERE ID=1001;
+-----------+--------------+---------------+
| ID | NAME | CLASS |
+-----------+--------------+---------------+
| 1001 | 李四 | 三年一班 |
+-----------+--------------+---------------+
1 rows in set (0.01 sec)
六、查询数据
SELECT cloumn_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N] [OFFSET M]
- 查询语句中你可以使用一个或多个表,表之间使用逗号分割,并使用WHERE语句来设定查询条件。
- SELECT命令可以读取一条或者多条记录;
- 你可以使用星号(*)来代替其它字段,SELECT语句会返回表的所有字段数据。
- 你可以使用WHERE语句来包含任何条件。
- 你可以使用LIMIT属性来设定返回的记录数。
- 你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。
6.1、MySQL WHERE子句
SELECT field1,field2,...,fieldN FROM table_name1,tabale_name2...
[WHERE condition1 [AND [OR]] condition2...
- 查询语句中你可以使用一个或者多个表,表之间使用逗号分割,并使用WHERE语句来设定查询条件。
- 你可以在WHERE子句中指定任何条件。
- 你可以使用AND或者OR指定一个或多个条件。
- WHERE子句也可以运用于SQL的DELETE或者UPDATE命令。
- WHERE子句类似于程序语言中的if条件,根据MySQL表中的字段值来读取制定的数据。
以下为操作符列表,可用于WHERE子句中:(下表中实例假定A为10,B为20)
操作符 | 描述 | 实例 |
---|---|---|
= | 等号,检测两个值是否相等,如果相等返回true | (A=B)返回false |
!= | 不等于,检测两个值是够不相等,如果不相等返回true | (A!=B)返回true |
> | 大于号,检测左边的值是否大于右边的值,如果大于返回true | (A>B)返回false |
< | 小于号,检测左边的值是否小于右边的值,如果小于返回true | (A<B)返回true |
>= | 大于等于号,检测左边的值是否大于等于右边的值,如果大于等于返回true | (A>=B)返回false |
<= | 小于等于号,检测左边的值是否小于等于右边的值,如果小于等于返回true | (A<=B)返回true |
如果我们想在MySQL数据表中读取指定的数据,WHERE子句是非常有用的。
使用主键来作为WHERE子句的条件查询是非常快速的。
如果给定的条件在表中没有任何匹配的记录,那么查询不会返回任何数据。
mysql> SELECT * from Student WHERE ID=1001;
+-----------+--------------+---------------+
| ID | NAME | CLASS |
+-----------+--------------+---------------+
| 1001 | 李四 | 三年一班 |
+-----------+--------------+---------------+
1 rows in set (0.01 sec)
6.2、MySQL LIKE子句
我们在使用SELECT
语句查询数据时可以在WHERE子句中使用等号=
来设定获取数据的条件,但是有时候我们需要获取非特定的数据,而是需要获取满足某种情况的数据(即模糊匹配),例如:查询Student表中所有姓王的同学的信息。
SQL LIKE子句使用百分号(%)字符来表示任意字符,类似于UNIX或正则表达式中的星号(*)
如果没有使用百分号(%),LIKE子句与等号(=)的效果是一样的。
SELECT field1,field2,...,fieldN
FROM table_name
WHERE field1 LIKE condition [AND [OR]] field2 = 'somevalue'
- 你可以在WHERE子句中指定任何条件。
- 你可以在WHERE子句中使用LINK子句。
- 你可以使用LIKE子句代替等号(=)。
- LIKE通常与(%)一同使用,类似于一个元字符的搜索。
- 你可以使用AND或者OR指定一个或多个条件。
- 你可以在DELETE或UPDATE命令中使用WHERE…LIKE子句来指定条件。
mysql> use Test;
Database changed
mysql> SELECT * from Student WHERE NAME LIKE "王%";
+-----------+---------------+---------------+
| ID | NAME | CLASS |
+-----------+---------------+---------------+
| 1001 | 王大力 | 三年一班 |
| 1087 | 王一凡 | 三年九班 |
+-----------+---------------+---------------+
2 rows in set (0.01 sec)
6.3、MySQL UNION子句
MySQL UNION操作符用于连接两个以上的SELECT语句的结果组合到一个结果集中。多个SELECT语句会删除重复的数据。
SELECT expression1,expression2,...,expressionN
FROM table_name
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1,expression2,...,expressionN
FROM table_name
[WHERE conditions];
参数:
- expression1,expression2,…,expressionN:要检查的列
- table_name:要检查的数据表
- WHERE conditions:可选,检索条件
- DISTINCT:可选,删除结果集中重复的数据。默认情况下UNION操作符以及删除了重复数据,所以DISTINCT修饰符对结果没啥影响
- ALL:可选,返回所有结果集,包含重复数据
UNION实例:
mysql> SELECT * FROM Websites;
+----+---------------+---------------------------+-------+---------+
| id | name | url | alexa | country |
+----+---------------+---------------------------+-------+---------+
| 1 | Google | https://www.google.cm/ | 1 | USA |
| 2 | 淘宝 | https://www.taobao.com/ | 13 | CN |
| 3 | 百度 | http://www.baidu.com/ | 4689 | CN |
| 4 | 微博 | http://weibo.com/ | 20 | CN |
| 5 | Facebook | https://www.facebook.com/ | 3 | USA |
| 7 | stackoverflow | http://stackoverflow.com/ | 0 | IND |
+----+---------------+---------------------------+-------+----------+
mysql> SELECT * FROM apps;
+----+------------+-------------------------+---------+
| id | app_name | url | country |
+----+------------+-------------------------+---------+
| 1 | QQ APP | http://im.qq.com/ | CN |
| 2 | 微博 APP | http://weibo.com/ | CN |
| 3 | 淘宝 APP | https://www.taobao.com/ | CN |
+----+------------+-------------------------+---------+
3 rows in set (0.00 sec)
mysql> SELECT country FROM Websites
-> UNION
->SELECT country FROM apps
->ORDER BY country;
+---------+
| countru |
+---------+
| CN |
| IND |
| USA |
+---------+
UNION ALL 实例:
mysql> SELECT country FROM Websites
-> UNION ALL
->SELECT country FROM apps
->ORDER BY country;
+---------+
| countru |
+---------+
| CN |
| CN |
| CN |
| CN |
| CN |
| IND |
| USA |
| USA |
| USA |
| USA |
+---------+
带有WHERE的SQL UNION AL实例:
SELECT country, name FROM Websites
WHERE country='CN'
UNION ALL
SELECT country, app_name FROM apps
WHERE country='CN'
ORDER BY country;
+---------+-----------+
| countru | name |
+---------+-----------+
| CN | 淘宝 |
| CN | QQ APP |
| CN | 微博 APP |
| CN | 微博 |
| CN | 百度 |
| CN | 淘宝 APP |
+---------+-----------+