MySQL數據表全部操做命令

今天整理了一了一下數據表的基本操做,但願能幫助有須要的人!!!!mysql

MySQL 數據庫表操做sql

第1章 表的介紹

MySQL中的表就和咱們excel表格中的sheet同樣,一個excel裏面能夠有多個sheet。在MySQL數據庫裏面,一個庫也能夠有多個表,每一個表中記錄了無數條的數據。這些關係型的數據顯示爲列和行(相似excel表格)。咱們隊MySQL的表操做就是對一個sheet操做。數據庫

第2章 表的操做

2.1查看錶

表是存在於數據庫中,因此咱們看的表應該是在某個庫的下面例如:database.sheet表示數據庫database下面的sheet表。下面咱們來學習SQL命令來查看錶:c#

mysql> show tables;
+------------------+
| Tables_in_oldboy |
+------------------+
| student         |
| test            |
| test2           |
+------------------+
3 rows in set (0.01 sec)
mysql> show create tabletest\G
*************************** 1. row***************************
       Table:test
Create Table: CREATE TABLE `test` (
  `id` int(4)NOT NULL AUTO_INCREMENT,
  `name`char(20) NOT NULL,
  PRIMARY KEY(`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULTCHARSET=utf8
1 row in set (0.00 sec)
mysql> desc test;
+-------+----------+------+-----+---------+----------------+
| Field | Type    | Null | Key | Default | Extra         |
+-------+----------+------+-----+---------+----------------+
| id    |int(4)   | NO   | PRI | NULL    | auto_increment |
| name  |char(20) | NO   |     | NULL   |                |
+-------+----------+------+-----+---------+----------------+
2 rows in set (0.01 sec)
小結:
一、show tables; #顯示庫裏面包含的全部表
二、desc test;    #顯示錶的結構
三、show create table test;  #顯示建立表的SQL語句


2.2表的建立

咱們能夠經過help create or help contents來查看幫助bash

mysql> create table student_test( id int(4) notnull, name char(20) not null, age tinyint(2) NOT NULL default '0', dept varchar(16) default NULL  );   #
建立一個表爲student_test,有4個字段


能夠經過desc來查看錶的結構ide

mysql> desc student_test;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    |int(4)      | NO   |    | NULL    |       |
| name  |char(20)    | NO   |    | NULL    |       |
| age   |tinyint(2)  | NO   |    | 0       |       |
| dept  |varchar(16) | YES  |     | NULL   |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

2.3表的刪除

方法一:drop命令學習

mysql> drop table student_test;
Query OK, 0 rows affected (0.00 sec)
 
mysql> show tables;
+------------------+
| Tables_in_oldboy |
+------------------+
| student         |
| test            |
| test2           |
+------------------+
3 rows in set (0.00 sec)

方法二:delete命令spa

咱們用上面表建立的命令從新建立表:student_test日誌

create table student_test( id int(4) not null, namechar(20) not null, age tinyint(2)  NOTNULL default '0', dept varchar(16) default NULL  );

查看錶excel

show tables
mysql> show tables;
+------------------+
| Tables_in_oldboy |
+------------------+
| student         |
| student_test    |
| test            |
| test2           |
+------------------+
4 rows in set (0.00 sec)
刪除表
delete from 表名:
刪除全部記錄,表結構還在,寫日誌,能夠恢復的,速度慢

 方法三:truncate

truncate talbe 表名
刪除表中的全部記錄,表結構還在,不寫日誌,沒法找回刪除的記錄,速度快
小結:
delete from 表名:
刪除全部記錄,表結構還在,寫日誌,能夠恢復的,速度慢
drop talbe 表名:
刪除表的結構和數據
truncate talbe 表名
刪除表中的全部記錄,表結構還在,不寫日誌,沒法找回刪除的記錄,速度快


使用場合:
當你再也不須要該表時, drop;
當你仍要保留該表,但要刪除全部記錄時, truncate;
當你要刪除部分記錄時(always with a whereclause), delete.

注意:
對於有主外鍵關係的表,不能使用truncate而應該使用不帶where子句的delete語句,因爲truncate不記錄在日誌中,不可以激活觸發器

2.4表的修改

2.4.1添加字段

mysql> alter table student_test add sex char(2)after age;  #這裏使用了參數after,表示在什麼以後插入,若是在第一行
QueryOK, 0 rows affected (0.02 sec)                            firs參數。
Records: 0 Duplicates: 0  Warnings: 0
 
mysql> desc student_test;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    |int(4)      | NO   |    | NULL    |       |
| name  |char(20)    | NO   |    | NULL    |       |
| age   |tinyint(2)  | NO   |    | 0       |       |
| sex   | char(2)    | YES  |     | NULL   |       |
| dept  |varchar(16) | YES  |     | NULL   |       |
+-------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

2.4.2修改type類型

mysql> desc student_test;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    |int(4)      | NO   |    | NULL    |       |
| name  |char(20)    | NO   |    | NULL    |       |
| age   |tinyint(2)  | NO   |    | 0       |       |
| sex   | char(2)     | YES |     | NULL    |      |
| dept  |varchar(16) | YES  |     | NULL   |       |
+-------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
 
mysql> alter tablestudent_test modify sex varchar(4);
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0  Warnings: 0
 
mysql> desc student_test;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    |int(4)      | NO   |    | NULL    |       |
| name  |char(20)    | NO   |    | NULL    |       |
| age   |tinyint(2)  | NO   |    | 0       |       |
| sex   | varchar(4)  | YES |     | NULL    |      |
| dept  |varchar(16) | YES  |     | NULL   |       |
+-------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

2.4.3刪除部分字段

mysql> alter tablestudent_test drop sex;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0  Warnings: 0
 
mysql> desc student_test;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    |int(4)      | NO   |    | NULL    |       |
| name  |char(20)    | NO   |    | NULL    |       |
| age   |tinyint(2)  | NO   |    | 0       |       |
| dept  |varchar(16) | YES  |     | NULL   |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

2.4.4改變表的字符集

mysql> show create table student_test\G
*************************** 1. row***************************
       Table:student_test
Create Table: CREATE TABLE `student_test` (
  `id` int(4)NOT NULL,
  `name`char(20) NOT NULL,
  `age`tinyint(2) NOT NULL DEFAULT '0',
  `dept`varchar(16) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
 
mysql> alter tablestudent_test CONVERT TO CHARACTER SET latin1;
mysql> show create table student_test\G         
*************************** 1. row***************************
       Table:student_test
Create Table: CREATE TABLE `student_test` (
  `id` int(4)NOT NULL,
  `name`char(20) NOT NULL,
  `age`tinyint(2) NOT NULL DEFAULT '0',
  `dept`varchar(16) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

2.4.5修改字段名字已經type類型

name字段改爲xingming,類型從char改爲varchar

mysql> desc student_test;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    |int(4)      | NO   |    | NULL    |       |
| name  | char(20)    | NO   |    | NULL    |       |
| age   |tinyint(2)  | NO   |    | 0       |       |
| dept  |varchar(16) | YES  |     | NULL   |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)
 
mysql> alter table student_test change columnname xingming varchar(40);
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0  Warnings: 0
 
mysql> desc student_test;
+----------+-------------+------+-----+---------+-------+
| Field    |Type        | Null | Key | Default |Extra |
+----------+-------------+------+-----+---------+-------+
| id       |int(4)      | NO   |    | NULL    |       |
| xingming | varchar(40) | YES |     | NULL    |      |
| age      |tinyint(2)  | NO   |    | 0       |       |
| dept     |varchar(16) | YES  |     | NULL   |       |
+----------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

2.4.6表的重命名

student_test表重命名爲stu_test

m

ysql> rename table student_test to stu_test;
Query OK, 0 rows affected (0.02 sec)
 
mysql> show tables;
+------------------+
| Tables_in_oldboy |
+------------------+
| stu_test        |
| student         |
| test            |
| test2           |
+------------------+
4 rows in set (0.00 sec)
第3章 表數據的操做

3.1insert命令插入數據

數據的表的插入使用命令insert,語法insert into 表名

mysql> insert into stu_testvalues(1,'kirk',28,'male');
Query OK, 1 row affected (0.00 sec)
 
mysql> select * from stu_test;                        
+----+----------+-----+------+
| id | xingming | age | dept |
+----+----------+-----+------+
|  1 |kirk     |  28 | male |
+----+----------+-----+------+
1 row in set (0.00 sec)

3.1.1插入數據遇到的問題

 ERROR 1300 (HY000): Invalid utf8 character string: '\xA1\xAFaaa\xA1\xAF'

解決辦法:引號問題’ ’這種是GB2312 , '  '這種是utf-8

ERROR 1366 (HY000): Incorrect stringvalue: '\xC4\xD0' for column 'sex' at row 1

解決辦法:show variables like 'chara%';

                   setcharacter_set_client=gb2312;

wKiom1fESNGhSgeUAACGxBT1nnU918.jpg-wh_50

                                                       該處查看會顯示亂碼

解決方法:set character_set_results=gb2312;

3.2修改表數據update

mysql> update stu_test setxingming='laowang' where id=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1  Warnings: 0
 
mysql> select * from stu_test;                          
+----+----------+-----+------+
| id | xingming | age | dept |
+----+----------+-----+------+
|  1 |laowang  |  28 | male |
|  2 |huasheng |  23 | male |
|  3 |dadou    |  20 | nv  |
+----+----------+-----+------+
3 rows in set (0.00 sec)
第4章 表的查詢

4.1條件查詢

mysql> select * from stu_test where xingming='dadou';
+----+----------+-----+------+
| id | xingming | age | dept |
+----+----------+-----+------+
|  3 |dadou    |  20 | nv  |
+----+----------+-----+------+
1 row in set (0.00 sec)
 
mysql> select xingming,age from stu_test;
+----------+-----+
| xingming | age |
+----------+-----+
| laowang |  28 |
| huasheng | 23 |
| dadou   |  20 |
+----------+-----+
3 rows in set (0.00 sec)
 
+----+----------+-----+------+
| id | xingming | age | dept |
+----+----------+-----+------+
|  1 |laowang  |  28 | male |
|  2 |huasheng |  23 | male |
|  3 |dadou    |  20 | nv  |
|  4 |dadou    |  20 | male |
+----+----------+-----+------+
4 rows in set (0.00 sec)
 
mysql> select 20 from stu_test;
+----+
| 20 |
+----+
| 20 |
| 20 |
| 20 |
| 20 |
+----+
4 rows in set (0.00 sec)
 
mysql> select distinct20 from stu_test;
+----+
| 20 |
+----+
| 20 |
+----+
1 row in set (0.00 sec)
 
mysql> select xingming,(age+dept) from stu_test;
+----------+------------+
| xingming | (age+dept) |
+----------+------------+
| laowang |         28 |
| huasheng |        23 |
| dadou   |         20 |
| dadou   |         20 |
+----------+------------+
4 rows in set, 3 warnings (0.01 sec)
 
mysql> selectxingming,(age+dept)+10 from stu_test;   #在上面的基礎上加10
+----------+---------------+
| xingming | (age+dept)+10 |
+----------+---------------+
| laowang |            38 |
| huasheng |            33 |
| dadou   |            30 |
| dadou   |            30 |
+----------+---------------+
4 rows in set, 3 warnings (0.00 sec)
小結:
select * from student where name='王五';
select name,english from student;
select distinct english from student;
 
select name,(chinese+english+math) fromstudent;
select name,(chinese+english+math)+10 fromstudent;
 
select name as 姓名,(chinese+english+math)+10 as 總分 from student;  //別名
select name 姓名,(chinese+english+math)+10  總分 from student;
 
select * from student whereenglish>'90';
select name from student where(chinese+english+math)>200;
select name from student where(chinese+english+math)> '200'  //這裏用單引號也是能夠的
 
select name from student whereenglish>80 and english<90;
select name from student where Englishbetween 80 and 90;  //這句跟上面那句是同樣的
 
select * from student where mathin(89,90,91);

4.2模糊查詢

使用like 加上百分號來匹配

select * from student where name like '李_'; (2個字符)
select * from student where name like '李%';  (2個字符以上)

 

4.3排序查詢

order by 排序查詢

select name,math from student order by math;  #默認是升序排序
select name 姓名,(chinese+english+math) 總分 from student order by (chinese+english+math) desc; #desc參數是降序
select name 姓名,(chinese+english+math) 總分 from student order by 總分 desc;
select * from student where name like '李%' order by (chinese+english+math) desc;

4.4統計數據

咱們有時候要看一個表裏面有多少條數據,須要統計

select count(name) from student; ##查看name字段有多少條記錄
select count(*) from student;
select count(*) from student where(chinese+english+math)>250;

 

4.5數據求和

求和

select sum(chinese),sum(english),sum(math) fromstudent;
 
select sum(chinese+english+math) from student;

4.6求平均

select avg(chinese) from student;
select avg(chinese+math+english) from student;
相關文章
相關標籤/搜索