mysql小记: 面试可用,公司开发可用

本文将会持续更新,有兴趣的小伙伴可以持续关注,有错误的地方希望大家慷慨指点。


学习参照: 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);



你可能感兴趣的:(mysql)