【Mysql學習】mysql的使用入門

北在南方發表於2016-04-15

開始學習mysql ,記錄自己學習的一點記錄。

–建立資料庫company
mysql> create database company;
Query OK, 1 row affected (0.00 sec)

–要知道系統中有那些資料庫,可以使用如下命令來查詢:
mysql> show databases;
+——————–+
| Database           |
+——————–+
| information_schema |
| company            |
| mysql              |
| test               |
+——————–+
4 rows in set (0.00 sec)
information_schema –主要儲存了系統中的一些資料庫物件資訊,比如使用者表資訊,列資訊,許可權資訊, 字符集資訊,分割槽資訊。
mysql      
      –儲存了系統的使用者許可權資訊
test               –系統自動建立的資料庫,任何人都可以使用。
–查詢當前使用的資料庫。
mysql> select database();
+————+
| database() |
+————+
| NULL       |
+————+
1 row in set (0.00 sec)

mysql> use company;
Database changed
mysql> select database();
+————+
| database() |
+————+
| company    |
+————+
1 row in set (0.00 sec)
–刪除資料庫company
mysql> drop database company;
Query OK, 0 rows affected (0.03 sec)
-使用use dbname 選擇要連線的資料庫
mysql> use mysql;
Database changed
–檢視mysql資料庫中存在的資料表。
mysql> show tables;
+—————————+
| Tables_in_mysql           |
+—————————+
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| servers                   |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+—————————+
23 rows in set (0.03 sec)
–建立表,由於mysql的表名是以目錄的形式存在磁碟上的,所以表名要符合任何目錄名允許的字元。
mysql> create table dept(deptno int(4),deptname varchar(50));
Query OK, 0 rows affected (0.00 sec)
–檢視錶結構。
mysql> desc dept;
+———-+————-+——+—–+———+——-+
| Field    | Type        | Null | Key | Default | Extra |
+———-+————-+——+—–+———+——-+
| deptno   | int(4)      | YES  |     | NULL    |       |
| deptname | varchar(50) | YES  |     | NULL    |       |
+———-+————-+——+—–+———+——-+
2 rows in set (0.00 sec)

mysql> create table employee (eid int(4),ename varchar(50), birthday date,deptno
 int (4));
Query OK, 0 rows affected (0.01 sec)
—檢視構造表的ddl語句。
mysql> show create table  employee G
*************************** 1. row ***************************
       Table: employee
Create Table: CREATE TABLE `employee` (
  `eid` int(4) DEFAULT NULL,
  `ename` varchar(50) DEFAULT NULL,
  `birthday` date DEFAULT NULL,
  `deptno` int(4) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

–alter table 的使用方法。
–修改表名。
mysql> alter table employee rename emp;
Query OK, 0 rows affected (0.00 sec)

mysql> desc emp;
+———-+————-+——+—–+———+——-+
| Field    | Type        | Null | Key | Default | Extra |
+———-+————-+——+—–+———+——-+
| eid      | int(4)      | YES  |     | NULL    |       |
| ename    | varchar(50) | YES  |     | NULL    |       |
| birthday | date        | YES  |     | NULL    |       |
| deptno   | int(4)      | YES  |     | NULL    |       |
+———-+————-+——+—–+———+——-+
4 rows in set (0.00 sec)

mysql> show tables ;
+——————-+
| Tables_in_company |
+——————-+
| dept              |
| emp               |
+——————-+
2 rows in set (0.00 sec)

–修改表中列名。
ALTER TABLE TABNAME CHANGE COLUMN old_col_name new_col_name col_definition
–將birthday 改為 birthdate
mysql> alter  table emp change birthday birdate date;
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc emp;
+———+————-+——+—–+———+——-+
| Field   | Type        | Null | Key | Default | Extra |
+———+————-+——+—–+———+——-+
| eid     | int(4)      | YES  |     | NULL    |       |
| ename   | varchar(50) | YES  |     | NULL    |       |
| birdate | date        | YES  |     | NULL    |       |
| deptno  | int(4)      | YES  |     | NULL    |       |
+———+————-+——+—–+———+——-+
4 rows in set (0.01 sec)
–修改表中欄位的型別
ALTER TABLE TABNAME MODIFY [COLUMN] column_definition [FIRST|AFTER col_name]

mysql> alter table emp modify eid  int(5);
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table emp modify sex char(2) first;
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> desc emp;
+———+————-+——+—–+———+——-+
| Field   | Type        | Null | Key | Default | Extra |
+———+————-+——+—–+———+——-+
| sex     | char(2)     | YES  |     | NULL    |       |
| eid     | int(5)      | YES  |     | NULL    |       |
| ename   | varchar(50) | YES  |     | NULL    |       |
| birdate | date        | YES  |     | NULL    |       |
| deptno  | int(4)      | YES  |     | NULL    |       |
+———+————-+——+—–+———+——-+
5 rows in set (0.01 sec)
比較一下 change 與modify的區別:
 1 change 和 modify 都可以修改表的定義,不同的是change後面需要寫兩次列名,不方便,
 2 但是change的優點是可以修改表中的列名稱,而modify則不能。
   alter table tabname  add new_column after/before ole_column;
   alter table emp  modify age int(3) first;
–增加表中的欄位
語法:
alter table tabname add [column] column_definition [first|after col_name]

mysql> alter table emp add column sex char(2);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc emp;
+———+————-+——+—–+———+——-+
| Field   | Type        | Null | Key | Default | Extra |
+———+————-+——+—–+———+——-+
| eid     | int(5)      | YES  |     | NULL    |       |
| ename   | varchar(50) | YES  |     | NULL    |       |
| birdate | date        | YES  |     | NULL    |       |
| deptno  | int(4)      | YES  |     | NULL    |       |
| sex     | char(2)     | YES  |     | NULL    |       |
+———+————-+——+—–+———+——-+
5 rows in set (0.00 sec)

mysql> alter table emp add column sex char(2) after ename;
ERROR 1060 (42S21): Duplicate column name `sex`
–刪除表中的欄位。
mysql> alter table emp drop column sex;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0
–指定新增欄位所在的位置。預設是新增到表中末尾。
mysql> alter table emp add column sex char(2) after ename;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc emp;
+———+————-+——+—–+———+——-+
| Field   | Type        | Null | Key | Default | Extra |
+———+————-+——+—–+———+——-+
| eid     | int(5)      | YES  |     | NULL    |       |
| ename   | varchar(50) | YES  |     | NULL    |       |
| sex     | char(2)     | YES  |     | NULL    |       |
| birdate | date        | YES  |     | NULL    |       |
| deptno  | int(4)      | YES  |     | NULL    |       |
+———+————-+——+—–+———+——-+
5 rows in set (0.00 sec)

–注意:CHANGEFIRSTAFTER COLUMN 是mysql 在標準sql的擴充。在其他資料庫上不一定適用
–關於DML 語句這裡和sql標準一樣的就不再多做介紹了,重點說一下 insert 插入操作:
   insert into tabname(col1,col2,…) values(val1,val2,…)
–mysql支援如下操作:
mysql> insert into dept(deptno ,deptname) values (1002,`ceo`);
Query OK, 1 row affected (0.00 sec)
mysql> insert into dept(deptno ,deptname) select 1003,`manager`;
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0
mysql> select * from dept;
+——–+———-+
| deptno | deptname |
+——–+———-+
|   1001 | hr       |
|   1002 | ceo      |
|   1003 | manager  |
+——–+———-+
3 rows in set (0.00 sec)
 insert into tabname(col1,col2,…) select val1,val2,..[,select val1,val2,…]
 其中 val與 col 的型別必須一致。否則:
mysql> insert into emp select 10001,`zhangsan`,`2010-12-30`,1001;
ERROR 1136 (21S01): Column count doesn`t match value count at row 1
mysql> desc emp;
+———+————-+——+—–+———+——-+
| Field   | Type        | Null | Key | Default | Extra |
+———+————-+——+—–+———+——-+
| sex     | char(2)     | YES  |     | NULL    |       |
| eid     | int(5)      | YES  |     | NULL    |       |
| ename   | varchar(50) | YES  |     | NULL    |       |
| birdate | date        | YES  |     | NULL    |       |
| deptno  | int(4)      | YES  |     | NULL    |       |
+———+————-+——+—–+———+——-+
5 rows in set (0.02 sec)
順序不一致時,會報錯,欄位型別不一致時也會報錯。


相關文章