經過mysql客戶端進入mysql後,實際位於全部倉庫以外:
* 選中要操做的數據庫實例
* 操做數據庫實例中的表或其餘實體.
注意: ";"表示一條SQL命令的結束,當命令結束後纔會執行此命令
* 登錄數據庫mysql
建表:sql
命令:create table <表名> ( <字段名> <類型> [,.. <字段名n> <類型n> ]); 數據庫
mysql> create table MyClass( > id int(4) not null primary key auto_increment, > name char(20) not null, > sex int(4) not null default ’′, > degree double(16,2));
獲取表結構:oracle
命令:desc 表名,或者show columns from 表名編碼
mysql>DESCRIBE MyClass mysql> desc MyClass; mysql> show columns from MyClass;
刪除表:.net
命令:drop table <表名> code
mysql> drop table MyClass;
插入數據:blog
命令:insert into <表名> [( <字段名> [,.. <字段名n> ])] values ( 值 )[, ( 值n )] 索引
mysql> insert into MyClass values(1,’Tom’,96.45),(2,’Joan’,82.99), (2,’Wang’, 96.59);
查詢表中的數據:ip
查詢全部行
命令:select <字段,字段,...> from < 表名 > where < 表達式 >
mysql> select * from MyClass;
查詢前幾行數據
mysql> select * from MyClass order by id limit 0,2; 或者 mysql> select * from MyClass limit 0,2;
命令:update 表名 set 字段=新值,…where 條件
mysql> update MyClass set name=’Mary’where id=1;
刪除表中數據
命令:delete from 表名 where 表達式
mysql> delete from MyClass where id=1;
在表中增長字段
命令:alter table 表名 add字段 類型 其餘;
例如:在表MyClass中添加了一個字段passtest,類型爲int(4),默認值爲 mysql> alter table MyClass add passtest int(4) default ’′
刪除字段
命令:alter table 表名 drop column 字段名;
alter table `t1` drop column money;
更改表名:
命令:rename table 原表名 to 新表名
例如:在表MyClass名字更改成YouClass mysql> rename table MyClass to YouClass;
爲何約束條件?
統計社區用戶的我的信息: 姓名,性別,年齡,地址
張三---> 張三 你猜 10000 火星
請問以上數據有意義? 對以上數據可以添加到數據庫?
mysql> desc user; +---------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(20) | YES | | NULL | | | sex | char(2) | YES | | NULL | | | age | int(11) | YES | | NULL | | | address | varchar(50) | YES | | NULL | | +---------+-------------+------+-----+---------+-------+ 5 rows in set (0.00 sec) mysql> insert into user values(1,'張三','你猜',10000,'火星'); Query OK, 1 row affected (0.06 sec) mysql> select * from user; +------+------+------+-------+---------+ | id | name | sex | age | address | +------+------+------+-------+---------+ | 1 | 張三 | 你猜 | 10000 | 火星 | +------+------+------+-------+---------+
爲了方便數據的管理和實現數據的有效性,一般使用約束條件控制用戶操做的數據.
mysql含有哪些約束條件?
主鍵約束 惟一約束 默認約束 非空約束 檢查性約束 外鍵約束
說明: oracle約束條件類型和使用方式,與mysql徹底相同
主鍵約束:
用於標示表中的數據.[一般要求主鍵字段沒有實際意義,無關緊要]
字段名 字段類型 primary key
使用了主鍵約束的字段,字段值非空且惟一.
create table t1( id int primary key, name varchar(20) ); mysql> desc t1; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.00 sec) mysql> insert into t1 values(1,'AA'); Query OK, 1 row affected (0.05 sec) mysql> select * from t1; +----+------+ | id | name | +----+------+ | 1 | AA | +----+------+ 1 row in set (0.00 sec) mysql> insert into t1 values(1,'BB'); ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
字段名 字段類型 unique
使用了惟一約束的字段,字段值不能重複[能夠爲空]
drop table if exists t1; create table t1( id int primary key, name varchar(20) unique ); mysql> desc t1; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(20) | YES | UNI | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.00 sec) mysql> insert into t1 values(1,'AA'); Query OK, 1 row affected (0.05 sec) mysql> select * from t1; +----+------+ | id | name | +----+------+ | 1 | AA | +----+------+ 1 row in set (0.00 sec) mysql> insert into t1 values(2,'AA'); ERROR 1062 (23000): Duplicate entry 'AA' for key 'name' mysql> insert into t1 values(2,'BB'); Query OK, 1 row affected (0.06 sec) mysql> select * from t1; +----+------+ | id | name | +----+------+ | 1 | AA | | 2 | BB | +----+------+ 2 rows in set (0.00 sec)
字段名 字段類型 default '默認值'
使用了默認約束的字段,當添加數據時未給該字段賦值時,該字段自動使用默認值做爲字段值
drop table if exists t1; create table t1( id int primary key, name varchar(20) unique, sex char(2) default '男' ); mysql> desc t1; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(20) | YES | UNI | NULL | | | sex | char(2) | YES | | 男 | | +-------+-------------+------+-----+---------+-------+ 3 rows in set (0.05 sec) mysql> insert into t1 values(1,'AA','女'); Query OK, 1 row affected (0.05 sec) mysql> select * from t1; +----+------+------+ | id | name | sex | +----+------+------+ | 1 | AA | 女 | +----+------+------+ 1 row in set (0.00 sec) mysql> insert into t1 values(2,'BB'); ERROR 1136 (21S01): Column count doesn't match value count at row 1 mysql> insert into t1(id,name) values(2,'BB'); Query OK, 1 row affected (0.36 sec) mysql> select * from t1; +----+------+------+ | id | name | sex | +----+------+------+ | 1 | AA | 女 | | 2 | BB | 男 | +----+------+------+
字段名 字段類型 check(條件)
使用了檢查性約束的字段,字段值必須知足相應條件.
mysql中含有檢查性約束,可是不強制執行. oracle中會強制執行.
drop table if exists t1; create table t1( id int primary key, name varchar(20) unique, sex char(2) default '男', age int check(age>18) ); mysql> desc t1; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(20) | YES | UNI | NULL | | | sex | char(2) | YES | | 男 | | | age | int(11) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 4 rows in set (0.02 sec) mysql> insert into t1 values(1,'AA','男',20); Query OK, 1 row affected (0.08 sec) mysql> select * from t1; +----+------+------+------+ | id | name | sex | age | +----+------+------+------+ | 1 | AA | 男 | 20 | +----+------+------+------+ 1 row in set (0.00 sec) mysql> insert into t1 values(2,'BB','男',9); Query OK, 1 row affected (0.36 sec) mysql> select * from t1; +----+------+------+------+ | id | name | sex | age | +----+------+------+------+ | 1 | AA | 男 | 20 | | 2 | BB | 男 | 9 | +----+------+------+------+ 2 rows in set (0.00 sec)
字段名 字段類型 not null
使用了非空約束的字段,當添加數據時必須設置該字段的值[或者含有默認約束]
drop table if exists t1; create table t1( id int primary key, name varchar(20) unique, sex char(2) default '男', age int check(age>18), address varchar(50) not null ); mysql> desc t1; +---------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(20) | YES | UNI | NULL | | | sex | char(2) | YES | | 男 | | | age | int(11) | YES | | NULL | | | address | varchar(50) | NO | | NULL | | +---------+-------------+------+-----+---------+-------+ 5 rows in set (0.00 sec) mysql> insert into t1 values(1,'AA','男',20,'鄭州'); Query OK, 1 row affected (0.05 sec) mysql> select * from t1; +----+------+------+------+---------+ | id | name | sex | age | address | +----+------+------+------+---------+ | 1 | AA | 男 | 20 | 鄭州 | +----+------+------+------+---------+ 1 row in set (0.02 sec) mysql> insert into t1(id,name,sex,age) values(2,'BB','男',20); ERROR 1364 (HY000): Field 'address' doesn't have a default value
編寫一張數據表: 含有ID,部門,姓名,工資. 部門名稱不限,員工姓名不限,工資不限. 1.添加10個員工 2.修改技術部的員工的工資爲5000 3.查詢營銷部員工的姓名和工資 4.因爲經營緣由,公司裁人,將工資高於4500的員工辭去. 5.查詢當前公司的全部信息 create table t1( id int(10), section varchar(10), name varchar(10), money int(10) ); insert into t1 value(1,"技術部","張三",8000); insert into t1 value(2,"營銷部","馬三",8000); update t1 set money=5000 where section="技術部"; select name,money from t1 where section="營銷部"; delete from t1 where money > 4500; select * from t1;
2. 約束練習
建立一個客戶表,含有這些字段:id(主鍵) name(非空) sex(默認爲不詳) age(25-50) cu_num(惟一,且不能爲空). 添加5個客戶. 查詢全部客戶的信息 因爲打字員的疏忽,錯把cu_num=c1003的性別寫爲男,請改正. 因爲工做關係,客戶c1001逃跑了,請處理. 查詢目前的客戶信息. create table kehu( id int(10) primary key, name varchar(10) not null, sex char(4) default '不詳', age int(5) check(25<age<50), cu_num int(5) unique); insert into kehu value(1,"張三","男",18,1); insert into kehu value(2,"王三","男",18,2); insert into kehu value(3,"李三","男",18,3); insert into kehu value(4,"馬三","男",18,4); insert into kehu value(5,"呂三","男",18,5); select * from kehu; update kehu set sex = "女" where cu_num = 3; delete from kehu where id = 1;
建立一張學生表,含有id(主鍵,自增加),name(惟一),age(大於18小於60),sex(默認爲男),班級
建立一張班級表,含有id(主鍵,自增加),班名
create table student( id int primary key auto_increment, name varchar(20) unique, age int check(age>18&&age<60), sex char(2) default '男', class int ); create table class( id int primary key auto_increment, classname varchar(20) );
查詢每一個學生屬於哪一個班?
select name,className from student,class where class=class.id;
新來了一個學生,請班長將學生添加到學生表,請問該學生能夠是哪些班的?
insert into student(name,sex,age,class) values('小三','男',22,5);
alter table 表名 add [constraint 約束匿名] foreign key(外鍵字段) references 主表名(被引用字段);
# 字段名 字段類型 約束, ..... [constraint 約束匿名] foreign key(外鍵字段) references 主表名(被引用字段) );
mysql> alter table student add foreign key(class) references class(id); Query OK, 4 rows affected (0.25 sec) Records: 4 Duplicates: 0 Warnings: 0 mysql> desc student; +-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(20) | YES | UNI | NULL | | | age | int(11) | YES | | NULL | | | sex | char(2) | YES | | 男 | | | class | int(11) | YES | MUL | NULL | | +-------+-------------+------+-----+---------+----------------+
student_ibfk_1
;https://blog.csdn.net/moxigandashu/article/details/63254901