学习MySQL之表操作

学习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;

解析:

  1. 如你不想字段为NULL,可以设置字段的属性为NOT NULL,在操作数据库时如果输入该字段的数据为NULL,就会报错。
  2. AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。
  3. PRIMARY KEY关键字用于定义主键。您可以使用多列来定义主键,列间以逗号分隔。
  4. 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]
  1. 如果没有指定WHERE子句,MySQL表中的所有记录都将被删除。
  2. 你可以在WHERE子句中指定任何条件。
  3. 你可以在单个表中一次性删除记录
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]
  1. 你可以同时更新一个或多个字段。
  2. 你可以在WHERE子句中指定任何条件。
  3. 你可以在一个单独表中同时更新数据
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]
  1. 查询语句中你可以使用一个或多个表,表之间使用逗号分割,并使用WHERE语句来设定查询条件。
  2. SELECT命令可以读取一条或者多条记录;
  3. 你可以使用星号(*)来代替其它字段,SELECT语句会返回表的所有字段数据。
  4. 你可以使用WHERE语句来包含任何条件。
  5. 你可以使用LIMIT属性来设定返回的记录数。
  6. 你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。

6.1、MySQL WHERE子句

SELECT field1,field2,...,fieldN FROM table_name1,tabale_name2...
[WHERE condition1 [AND [OR]] condition2...
  1. 查询语句中你可以使用一个或者多个表,表之间使用逗号分割,并使用WHERE语句来设定查询条件。
  2. 你可以在WHERE子句中指定任何条件。
  3. 你可以使用AND或者OR指定一个或多个条件。
  4. WHERE子句也可以运用于SQL的DELETE或者UPDATE命令。
  5. 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'
  1. 你可以在WHERE子句中指定任何条件。
  2. 你可以在WHERE子句中使用LINK子句。
  3. 你可以使用LIKE子句代替等号(=)。
  4. LIKE通常与(%)一同使用,类似于一个元字符的搜索。
  5. 你可以使用AND或者OR指定一个或多个条件。
  6. 你可以在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];

参数

  1. expression1,expression2,…,expressionN:要检查的列
  2. table_name:要检查的数据表
  3. WHERE conditions:可选,检索条件
  4. DISTINCT:可选,删除结果集中重复的数据。默认情况下UNION操作符以及删除了重复数据,所以DISTINCT修饰符对结果没啥影响
  5. 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  |
+---------+-----------+
发布了48 篇原创文章 · 获赞 5 · 访问量 2610

猜你喜欢

转载自blog.csdn.net/Mr_robot_strange/article/details/104502019
今日推荐