本文将会持续更新,有兴趣的小伙伴可以持续关注,有错误的地方希望大家慷慨指点。
学习参照: msyql官方文档:http://dev.mysql.com/doc/
日期:2016-6-30
学习任务:
1,、 使用mysql创建数据库;
2、 使用mysql创建多表操作和表之间外键关系创建;
学习代码总结如下:
/*MYSQL基础语法的学习: 日期: 2016-6-30*/ 一、 创建数据库的语法: /*MYSQL官方默认创建数据库的语法:*/ /* CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_specification] ... create_specification: [DEFAULT] CHARACTER SET [=] charset_name | [DEFAULT] COLLATE [=] collation_name 注意: 假如你床架的数据库已经存在的话就会报错 */ /*使用命令创建数据库*/ CREATE DATABASE IF NOT EXISTS TEST_DATABASE; /*mysql数据库默认的是小写的,因此,即使你创建时填写的是大写数据库名称,但是创建成功之后就会变成小写的*/ /*使用命令: USE + 数据库名称,表示使用该数据库为默认的数据库*/ USE testcreatedatabase; 二,创建表的语法演示: /*查看数据库中的表有哪些*/ SHOW TABLES; /*MySQL官网创建表的基本语法是:*/ CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name (create_definition,...) [table_options] [partition_options] /*例子演示:*/ CREATE TABLE IF NOT EXISTS USER_INFO( ID INT(8)PRIMARY KEY, USERNAME VARCHAR(20), PASSWORD VARCHAR(16) NOT NULL, SEX VARCHAR(2), AGE INT(2) ); 1、 USE CREATE TABLE ... LIKE TO CREATE an empty TABLE based ON the definition of another TABLE, including ANY COLUMN attributes AND INDEXES defined IN the original TABLE(大体意思是这样的"使用语法: CREATE TABLE ... LIKE 创建一张新表,这张 新表的结构和你选择的默认表的结构完全相同,包括属性和索引等信息其实就是这张表的复制版本"); CREATE TABLE IF NOT EXISTS DB_USER_INFO LIKE USER_INFO;/*发现:表db_user_info表和user_info表的结构信息完全相同* 语法分析如下: CREATE TABLE DB_TABLE1 LIKE DB_TABLE2; 当DB_TABKLE2这张表被锁住的时候或者不存在的时候会抛出创建失败的异常。 还有一种情况是这样的: If the original table is a TEMPORARY table, CREATE TABLE ... LIKE does not preserve TEMPORARY. To create a TEMPORARY destination table, use CREATE TEMPORARY TABLE ... LIKE. 如果原始表示TEMPORARY表,但是你使用的语法"CREATA TABLE ... LIKE;"不是TEMPORARY,为了创建一张TEMPORARY表那你可以使用以下 语法: CREATE TEMPORARY ... LIKE ; */ 2、 CREATE TABLE ... SELECT Syntax; You can CREATE ONE TABLE FROM another BY adding a SELECT statement AT the END of the CREATE TABLE statement: CREATE TABLE new_tbl [AS] SELECT * FROM orig_tbl; /*测试例子: 完全复制表的字段*/ CREATE TABLE TEST1 AS SELECT * FROM USER_INFO;/*类似于使用CREATE TABLE ... LIKE的效果,但是实质上是有区别的*/ /*测试例子: 指定表的字段创建新表*/ CREATE TABLE TEST2 AS SELECT T1.USERNAME,T1.PASSWORD FROM TEST1 T1;/*指定表的username和password两个字段信息创建新表TEST2*/ /*还有一种情况就是: 在创建新表的情况下(拥有自己的字段的情况下),还可以在其他表中检索字段作为这张新表的字段,演示如下*/ CREATE TABLE TEST3 ( ID INT(8) PRIMARY KEY DEFAULT 10, HIGHT DECIMAL(8,2), WEIGHT DECIMAL(5,2) ) SELECT T1.USERNAME,T1.PASSWORD FROM TEST1 T1; 3、 其它相关操作请参考: http://dev.mysql.com/doc/refman/5.7/en/ALTER-table.html 三、 多表操作中的主键,外键关系设置:在这里以两张表演示一下表之间的外键关系,表1: 订单表(ORDER),订单明细表(Order_detail); /*创建订单表: Order*/ CREATE TABLE IF NOT EXISTS db_Order( ORDER_ID INT(8) AUTO_INCREMENT PRIMARY KEY,/*强这个字段设置成自动增长,边去是主键*/ ORDER_NAME VARCHAR(100) NOT NULL, ORDER_FLAG BOOLEAN DEFAULT 1 )ENGINE=INNODB; /*创建订单明细表: Order_detail*/ CREATE TABLE IF NOT EXISTS DB_ORDER_DETAIL( ORDER_DETAIL_ID INT(8) AUTO_INCREMENT PRIMARY KEY,/*设置为主键并且自动增长*/ ORDER_DETAIL_NAME VARCHAR(200) NOT NULL, ORDER_ID INT(8), ORDER_DETAIL_FLAG BOOLEAN DEFAULT 1, FOREIGN KEY(ORDER_ID) REFERENCES DB_ORDER(ORDER_ID) ON DELETE CASCADE )ENGINE=INNODB; /* 这样就设置好了表db_order和表db_order_detail之间的关系了。 一个订单对应多个订单明细。在这里可以插入几条数据作测试 */ /*向db_order表中插入数据*/ INSERT INTO db_ORDER(ORDER_ID,ORDER_NAME,ORDER_FLAG) VALUE(1,'A',TRUE); INSERT INTO db_ORDER(ORDER_ID,ORDER_NAME,ORDER_FLAG) VALUE(2,'B',TRUE); INSERT INTO db_ORDER(ORDER_ID,ORDER_NAME,ORDER_FLAG) VALUE(3,'C',TRUE); INSERT INTO DB_ORDER_DETAIL(ORDER_DETAIL_ID,ORDER_DETAIL_NAME,ORDER_ID,ORDER_DETAIL_FLAG) VALUE(1,"aa",1,FALSE); INSERT INTO DB_ORDER_DETAIL(ORDER_DETAIL_ID,ORDER_DETAIL_NAME,ORDER_ID,ORDER_DETAIL_FLAG) VALUE(2,"BB",1,FALSE); INSERT INTO DB_ORDER_DETAIL(ORDER_DETAIL_ID,ORDER_DETAIL_NAME,ORDER_ID,ORDER_DETAIL_FLAG) VALUE(3,"cc",1,FALSE); INSERT INTO DB_ORDER_DETAIL(ORDER_DETAIL_ID,ORDER_DETAIL_NAME,ORDER_ID,ORDER_DETAIL_FLAG) VALUE(4,"AA",2,FALSE); INSERT INTO DB_ORDER_DETAIL(ORDER_DETAIL_ID,ORDER_DETAIL_NAME,ORDER_ID,ORDER_DETAIL_FLAG) VALUE(5,"BB",2,FALSE); INSERT INTO DB_ORDER_DETAIL(ORDER_DETAIL_ID,ORDER_DETAIL_NAME,ORDER_ID,ORDER_DETAIL_FLAG) VALUE(6,"CC",2,FALSE); INSERT INTO DB_ORDER_DETAIL(ORDER_DETAIL_ID,ORDER_DETAIL_NAME,ORDER_ID,ORDER_DETAIL_FLAG) VALUE(7,"AA",2,FALSE); INSERT INTO DB_ORDER_DETAIL(ORDER_DETAIL_ID,ORDER_DETAIL_NAME,ORDER_ID,ORDER_DETAIL_FLAG) VALUE(8,"CC",2,FALSE); INSERT INTO DB_ORDER_DETAIL(ORDER_DETAIL_ID,ORDER_DETAIL_NAME,ORDER_ID,ORDER_DETAIL_FLAG) VALUE(9,"BB",2,FALSE);