zoukankan      html  css  js  c++  java
  • MYSQL培训准备(1):MYSQL 的数据插入

        这些时应公司要求,需要给开发部培训一下MYSQL,所以一直在想,从什么入手,才能让各位大虾感兴趣!从语法开始吧,这能让熟悉SQL server的最快了解和感兴趣!

        在MYSQL中,除了我们熟悉的INSERT INTO插入语句外,还有一个特殊的语句,REPLACE INTO语句。

    1、INSERT INTO语句  

    语法一: 
    
    INSERT [LOW_PRIORITY | DELAYED] [IGNORE]  [INTO] tbl_name [(col_name,...)]  VALUES (expression,...),(...),... 
    
    语法二:
    
    INSERT [LOW_PRIORITY | DELAYED] [IGNORE]  [INTO] tbl_name [(col_name,...)]  SELECT ... 
    
    语法三: 
    
    INSERT [LOW_PRIORITY | DELAYED] [IGNORE]  [INTO] tbl_name  SET col_name=expression, col_name=expression, ...
    

        INSERT INTO... VALUES形式的语句基于明确指定的值插入行。一个expression可以引用在一个值表先前设置的任何列。INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2); 但不能这样:INSERT INTO tbl_name (col1,col2) VALUES(col2*2,15);.

        INSERT INTO SELECT形式插入从其他表选择的行。它必须满足下列条件:1)查询不能包含一个ORDER BY子句。2)INSERT语句的目的表不能出现在SELECT查询部分的FROM子句;

        如果你为INSERT ... VALUES或INSERT ... SELECT不指定列表,所有列的值必须在VALUES()表或由SELECT提供。如果你不知道表中列的顺序,使用DESCRIBE tbl_name来找出。如果你指定一个列表并没命名表中所有列,未命名的列被设置为它们的缺省值。

        如果你在一个有许多值行的INSERT中指定关键词IGNORE,表中任何复制一个现有PRIMARY或UNIQUE键的行被忽略并且不被插入。如果你不指定IGNORE,插入如果有任何复制现有关键值的行被放弃。

        需要注意的是:

        1)把一个字符串插入到超过列的最大长度的一个CHAR、VARCHAR、TEXT或BLOB列中,值被截断为列的最大长度。

        2)把一个对列类型不合法的值插入到一个日期或时间列,列被设置为该列类型适当的“零”值。

        3)插入NULL到被声明了NOT NULL的列,列被设置为它的缺省值。

        4)将超出列范围的值设置给一个数字列,值被剪切为范围内适当的端点值。

        5)将数字列设成例如'10.34 a'的值,拖尾的垃圾被剥去并仍然是数字部分被插入。如果值根本不是一个数字,列被设置到0。

    2、REPLACE INTO语句

    语法一:
    
    REPLACE [LOW_PRIORITY | DELAYED] [IGNORE]  [INTO] tbl_name [(col_name,...)]  VALUES (expression,...),(...),... 
    
    语法二:
    
    REPLACE [LOW_PRIORITY | DELAYED] [IGNORE]  [INTO] tbl_name [(col_name,...)]  SELECT ... 
    
    语法三: 
    
    REPLACE [LOW_PRIORITY | DELAYED] [IGNORE]  [INTO] tbl_name  SET col_name=expression, col_name=expression, ...

        REPLACE INTO 跟INSERT INTO功能类似,不同点在于:REPLACE INTO首先尝试插入数据到表中, 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。 否则,直接插入新数据。类似于SQL Server中以下语句:

    if not exists (select 1 from t where id = 1)?  
    insert into t(id, update_time) values(1, getdate())  
    else  
    update t set update_time = getdate() where id = 1 

         需要注意的是:

        1)插入数据的表必须有主键或者是唯一索引!否则的话,REPLACE INTO会直接插入数据,这将导致表中出现重复的数据。

        2)如果一个表中既有主键,又有唯一索引,或者有多个唯一索引时,必须用INSERT INTO和UPDATE代替REPLACE INTO。

        我们创建一张表t_s_alarm,创建一个主键i_id,创建一个唯一索引i_code,语句如下:

    create table t_s_alarm(
    i_id INT(10) unsigned not null auto_increment,
    i_code INT(10) unsigned  not NULL,
    v_alarm varchar(100) default NULL,
    v_memo VARCHAR(100) default NULL,
    primary key (i_id),
    unique key (i_code))

        插入三条记录:

    INSERT INTO t_s_alarm (i_code, v_alarm, v_memo) VALUES (1, 'alarm1', 'test1'), (2, 'alarm2', 'test1'), (3, 'alarm3', 'test3');

        执行查询结果: 

    select * from t_s_alarm

         再执行replace语句,执行结果是影响了2条记录:

    REPLACE INTO t_s_alarm (i_code, v_alarm, v_memo) VALUES (1, 'alarm4', 'test4')
    执行结果:
    Query OK, 2 rows affected (63 ms)

         执行查询结果: 

    select * from t_s_alarm

     

    从查询的结果来看,第一条记录被删除了,插入了一条新记录。

  • 相关阅读:
    数组的方法 Array.map();Array.every()和Array.some();数组的indexof();检测是否是数组isArray(obj);
    jsonp的三种跨域方式
    Python函数的参数
    Python 函数
    collection 类
    字符串,列表,元组,字典基本函数
    图像处理------图像加噪 分类: 视频图像处理 2015-07-24 09:26 24人阅读 评论(0) 收藏
    图像处理------理解卷积 分类: 视频图像处理 2015-07-24 09:25 24人阅读 评论(0) 收藏
    图像处理------颜色梯度变化 (Color Gradient) 分类: 视频图像处理 2015-07-24 09:23 27人阅读 评论(0) 收藏
    图像处理------噪声之美
  • 原文地址:https://www.cnblogs.com/haoge520/p/5084997.html
Copyright © 2011-2022 走看看