SQL (十四)插入数据(insert语句,把数据插入表中)

    技术2022-07-11  134

    文章目录

    插入完整的行:values子句不安全写法安全写法:在表名后的括号明确给出列名小结 插入行的一部分:简单插入某些查询的结果(即检索出的数据):insert select示例:把另一个表的某几列合并到一个表中 从一个表复制到另一个表:select into语句(不用insert语句实现数据的插入)示例小结 总结

    插入完整的行:values子句

    不安全写法

    insert into Customers values('1000000006', 'Toy Land', '123 Any Street', 'New York', 'NY', '11111', 'USA', NULL, NULL);

    总之就是次序很重要,但是次序很容易输入出错,所以这样写不安全

    安全写法:在表名后的括号明确给出列名

    也更繁琐,有个明确的对应关系,出错的概率就小很多

    insert into Customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact, cust_email) values('1000000006', 'Toy Land', '123 Any Street', 'New York', 'NY', '11111', 'USA', null, null);

    由于我前面已经插入了这一行,所以这次插入同样的数据,出错了,但是代码本身没错哦

    这种写法,可以换values列表的输入次序,只要把前面表名后括号中的项的顺序也改一改就好了,保证对应关系正确

    insert into Customers(cust_id, cust_contact, cust_email, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country) values('1000000006', null, null, 'Toy Land', '123 Any Street', 'New York', 'NY', '11111', 'USA');

    当然还是报duplicate entry错误啦

    小结

    不要用第一种不安全写法,因为表结构一旦变化,前面的代码就都完犊子。。。不管用第一种还是第二种,最起码的一点一定要保证:values列表的值的数目是对的,这样才是提供完整一行呀。否则就会出错。

    插入行的一部分:简单

    即只给某些列提供值,其他列不给值就行了。但是必须保证不给值的那些列允许是null值或者有默认值才可以

    insert into Customers(cust_id, cust_contact, cust_email, cust_name, cust_address, cust_city, cust_state) values('1000000006', null, null, 'Toy Land', '123 Any Street', 'New York', 'NY');

    当然还是报duplicate entry错误啦

    插入某些查询的结果(即检索出的数据):insert select

    示例:把另一个表的某几列合并到一个表中

    示例代码

    insert into Customers(cust_id, cust_contact, cust_email, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country) select cust_id, cust_contact, cust_email, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country from CustNew;

    这个代码会报错,因为我们的数据库没有CustNew这个表。但是不影响学习这个知识

    insert select可以用一个select语句插入多行不要求insert into后表名括号中的列名和后面select后的列名一样,因为DBMS操作的是列的位置,列名只是给出位置而已,他可以正确解析。insert select中的select语句可以包含where子句。

    从一个表复制到另一个表:select into语句(不用insert语句实现数据的插入)

    select into语句完全和insert无关,但也是用于实现数据插入的select into 语句把数据导入到的新表是运行时创建的,之前并不存在而insert select是把一个表中导出的数据导入到另一个之前就存在的表。

    示例

    select * into CustCopy from Customers;

    mysql不支持这种语法。。。 它要这么写:

    CREATE table CustCopy as select * from Customers;

    但我觉得还是select into更好,很易懂

    小结

    select inro可以用很多select选项,但是我这里用mysql不支持这种语法也没法做实验可以用联结从多个表插入数据,我觉得这个很难,两个复杂功能一起用,,,数据可以来自多个不同的表,但是去向只有一个,只能被插入到一个表

    总结

    关键字

    intovaluesselect into:把行导入到一个新表insert select:从其他表导入行create table
    Processed: 0.010, SQL: 9