搞定linux上MySQL編程(二):MySQL文法基礎操作,linuxmysql
【著作權聲明:尊重原創,轉載請保留出處:blog.csdn.net/shallnet,文章僅供學習交流,請勿用於商業用途】
sql(structured query language)是一種資料庫查詢和程式設計語言,用於存取資料以及查詢、更新和管理關聯性資料庫系統。sql語言套件含3部分:1. 資料定義語言 (Data Definition Language)(DDL),用於定義和管理對象,例如資料庫、資料表以及試圖等。例如create、drop、alter等語句。2. 資料操作語言(DML),用於操作資料庫中資料,例如select、 insert、update、delete等。3. 資料控制語言(DCL),用於管理資料庫,包含系統管理權限及資料更改。例如grant、revoke、commit、rollback等。類似進階開發語言,sql中資料也有不同的類型,不同的資料類型存放不同的資料,sql中資料類型分為5種:字元型(存放一段較短的字串)、文本型(儲存大串的字元)、數值型(存放整數、實數、浮點數)、邏輯型(即布爾型,取值0或1)、日期型。sql語句中也可以添加註釋,有如下三種:“#”(類似shell指令碼的注釋)、“--”、和類似c語言的/*....*/可多行注釋。資料庫的操作:1.建立資料庫:create database <資料庫名稱>。例如:create database db_users;mysql> create database db_users;Query OK, 1 row affected (0.00 sec)mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || db_users || mysql || test |+--------------------+5 rows in set (0.00 sec)
2.刪除資料庫:drop database <資料庫名稱>。例如:mysql> drop database db_users;Query OK, 0 rows affected (0.00 sec)mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || test |+--------------------+3 rows in set (0.00 sec)mysql>
表的操作:表是資料庫重要組成部分,資料庫通常由一個或多個資料表組成。資料庫中所有資料或資訊都被儲存在這些資料表中。每一個表名稱在資料庫中是唯一的,表由行和列組成,每一列列包括該列名稱、資料類型和其他屬性,而行則具體包含某一列的記錄或資料。1.建立表: create table <表名> (<列名> <資料類型> [<列級完整性條件約束條件>][,<列名> <資料類型> [<列級完整性條件約束條件>] ]...[,<表級完整性條件約束條件> ])實際使用中一般只用到比較簡單的表建立語言,只需要表面和欄位定義。例如:mysql> use db_users;Database changedmysql> create table regusers ( -> userid int auto_increment not null primary key, -> username char(32), -> birth date);Query OK, 0 rows affected (0.01 sec) mysql> describe regusers;+----------+----------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+----------+----------+------+-----+---------+----------------+| userid | int(11) | NO | PRI | NULL | auto_increment || username | char(32) | YES | | NULL | || birth | date | YES | | NULL | |+----------+----------+------+-----+---------+----------------+3 rows in set (0.00 sec)
2.修改表,當發現表結構不滿足要求時,使用alter table語句修改列屬性,甚至可以修改表名稱。修改文法如下:alter table <表名>[ADD <新列名> <資料類型> [完整性條件約束] ][DROP <完整性條件約束>][ALTER COLUMN <列名> <資料類型>];例如原來regusers表中沒有“最後登入時間”屬性,可以通過修改表解決該問題。如下:mysql> alter table regusers add last_login date;Query OK, 0 rows affected (0.01 sec)Records: 0 Duplicates: 0 Warnings: 0mysql> describe regusers;+------------+----------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+------------+----------+------+-----+---------+----------------+| userid | int(11) | NO | PRI | NULL | auto_increment || username | char(32) | YES | | NULL | || birth | date | YES | | NULL | || last_login | date | YES | | NULL | |+------------+----------+------+-----+---------+----------------+4 rows in set (0.00 sec)mysql>
3. 刪除表,drop table <表名>,<表名>...;可以指定多個表,同時刪除。記錄的操作:資料庫中記錄就是實際的資料資訊,資料的儲存也是通過資料記錄來體現的。sql的功能主要體現在對這些記錄的操作上。儲存記錄的前提是必須有資料庫和資料表,有了表之後就可以進行插入、刪除、更新操作了。1.插入記錄,使用insert語句向指定資料表中插入新的資料行。文法格式如下:insert into <表名> [(<屬性列1>,<屬下列2>...)] values (<常量1> [,<常量2>] ...); 例如:mysql> insert into regusers (userid, username, birth, last_login) values (10000, 'allen', '1981-1-1', '2014-2-2');Query OK, 1 row affected (0.00 sec)mysql> insert into regusers (username, birth, last_login) values ('brooks', '1982-4-2', '2014-4-30');Query OK, 1 row affected (0.00 sec)mysql> insert into regusers (username, birth, last_login) values ('curry', '1985-8-12', '2014-1-17');Query OK, 1 row affected (0.00 sec)mysql> select * from regusers;+--------+----------+------------+------------+| userid | username | birth | last_login |+--------+----------+------------+------------+| 10000 | allen | 1981-01-01 | 2014-02-02 || 10001 | brooks | 1982-04-02 | 2014-04-30 || 10002 | curry | 1985-08-12 | 2014-01-17 |+--------+----------+------------+------------+3 rows in set (0.00 sec)mysql>
4. 更新記錄,使用update語句更新或修改滿足規定條件的記錄。update語句格式為:update <表名> set <列名>=<運算式> [,<列名>=<運算式>]... [where <條件>];例如將regusers表中姓名為brooks的記錄的記錄修改為ben,如下:mysql> update regusers set username='ben' where username='brooks';Query OK, 1 row affected (0.00 sec)Rows matched: 1 Changed: 1 Warnings: 0mysql> select * from regusers;+--------+----------+------------+------------+| userid | username | birth | last_login |+--------+----------+------------+------------+| 10000 | allen | 1981-01-01 | 2014-02-02 || 10001 | ben | 1982-04-02 | 2014-04-30 || 10002 | curry | 1985-08-12 | 2014-01-17 |+--------+----------+------------+------------+3 rows in set (0.01 sec)mysql>
5. 刪除記錄。使用delete語句刪除資料表中滿足指定條件的記錄。delete語句的文法為:delete from <表名> [where <條件>]; 例如刪除表中userid為10002的的記錄如下:mysql> delete from regusers where userid=10002;Query OK, 1 row affected (0.02 sec)mysql> select * from regusers;+--------+----------+------------+------------+| userid | username | birth | last_login |+--------+----------+------------+------------+| 10000 | allen | 1981-01-01 | 2014-02-02 || 10001 | ben | 1982-04-02 | 2014-04-30 |+--------+----------+------------+------------+2 rows in set (0.00 sec)mysql>
資料庫查詢操作:sql使用select語句實現資料庫的查詢。查詢是資料庫使用最為頻繁的操作。select可以查詢表中指定滿足條件的若干列,同時可對查詢結果按一定順序排序。
查詢表tb_users中所有記錄sql如下:
mysql> select * from tb_users;+--------+----------+------------+------------+| userid | username | birth | last_login |+--------+----------+------------+------------+| 10000 | allen | 1981-01-01 | 2014-02-02 || 10001 | ben | 1982-04-02 | 2014-04-30 || 10002 | curry | 1985-08-12 | 2014-01-17 |+--------+----------+------------+------------+3 rows in set (0.00 sec)
查詢出生年月小於1983-1-1的所有使用者:
mysql> select * from tb_users where birth < '1983-1-1';+--------+----------+------------+------------+| userid | username | birth | last_login |+--------+----------+------------+------------+| 10000 | allen | 1981-01-01 | 2014-02-02 || 10001 | ben | 1982-04-02 | 2014-04-30 |+--------+----------+------------+------------+2 rows in set (0.00 sec)
查詢出生年月大於1982-1-1,並且按最後登入時間排序:
mysql> select * from tb_users where birth > '1982-1-1' order by last_login;+--------+----------+------------+------------+| userid | username | birth | last_login |+--------+----------+------------+------------+| 10002 | curry | 1985-08-12 | 2014-01-17 || 10001 | ben | 1982-04-02 | 2014-04-30 |+--------+----------+------------+------------+2 rows in set (0.00 sec)
只顯示使用者及其最後登入時間:
mysql> select username,last_login from tb_users;+----------+------------+| username | last_login |+----------+------------+| allen | 2014-02-02 || ben | 2014-04-30 || curry | 2014-01-17 |+----------+------------+3 rows in set (0.00 sec)