【Mysql 學習】mysql 的使用入門

楊奇龍發表於2010-12-31

開始學習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)

--注意:CHANGE\FIRST\AFTER 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)
順序不一致時,會報錯,欄位型別不一致時也會報錯。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-683058/,如需轉載,請註明出處,否則將追究法律責任。

相關文章