一、数据插入 INSERT
eg:INSERT INTO student VALUES(NULL, 'lulu', 24, 'chaoyang beijing');
这句指令将会在student表中插入一行新数据。这种写法必须保证每个值和表中的列顺序一一对应,如果不想指定值,可以写NULL,但不能省略。例如,表定义时可为null的列或指定自增的列。
虽然这种写法很简单,但是并不安全。因为它要求数据的顺序已经完整性,在表结构有变更时甚至普通应用时都是不安全的。更安全的用法如下。
eg:INSERT INTO student(sid, name, age, address) VALUES(NULL, 'lulu', 24, 'chaoyang beijing');
这句指令中,因为提供了列名,VALUES中的数据只需要与前面的列明相对应即可,不必再受到完整性和表中列顺序的限制。通常情况下,推荐这种用法,比较安全。注意,如果想省略某列时,必须满足一定条件:列定义允许为NULL,或者,列定义时给出了默认值(包括自增列)。
同时向表中插入多个行:
eg:INSERT INTO student(name, age, address) values('lulu', 24, 'chaoyang beijing'),('ss', 25, 'men beijing');
插入检索出来的结果:
eg:INSERT INTO student(name, age, address) SELECT name, a, add FROM school;
上一句中,将school中所有数据导入到了student中。从中额可以看出SELECT与INSERT的列名是无关的,只要对应位置的列的类型通用即可。
二、数据更新 UPDATE
1.使用UPDATE时,除非特殊情况,否则一定要加WHERE子句,否则将更新表中的所有行。
eg:UPDATE student SET age = 23 WHERE sid = 2;
这一句指令将student中,sid为2的行的age设置了新的值23.如果没有WHERE子句,将更新student中所有行的age为23。
2.可以同时更新多个行的数据,如下。
eg:UPDATE student SET age = 23, name = 'lili' WHERE sid = 2;
为删除某数据中指定列的值,可以SET为NULL。
3.可以把SELECT的结果作为新值UPDATE给指定列,但是这里要注意。在SqlServer中可以简单的这样写:
eg:update student SET student.name = (selcet name from school) WHERE student.sid = scholl.sid;
但是在Mysql中却不行,必须用内联结:
eg:update student INNER JOIN (SELECT * from school WHERE sid > 1) as sc ON student.sid = sc.sid SET student.name = sc.name;
4.可以把SELECT的结果作为UPDATE指令中WHERE子句的条件:
eg:UPDATE student SET name = 'test' WHERE sid IN(SELECT sid from scholl);
三、删除数据 DELETE
使用DELETE时,除非特殊情况,否则一定要加WHERE子句,否则将删除表中的所有行。
eg:DELETE FROM student WHERE sid = 1;
四、创建表 CREATE TABLE
eg:CREATE TABLE student(
sid int NOT NULL AUTO_INCREMENT,
name char(20) NOT NULL,
age int NULL,
PRIMARY KEY(sid));
上例看出,每列列名后面是列的数据类型。
AUTO_INCREMENT是自增标示,当插入数据时,如果没指定此列的值,Mysql会自定填充一个比上一次+1的值。如果某次插入中指定了自增列的一个值,那下次自动填充时,将从上一次的指定值开始+1.每个表只允许一个AUTO_CREMENT的列,切该列必须被索引,如指定为主键。自增列是可以指定初始值的,AUTO_INCREMENT = 100, 则从100开始自增。(这里要注意的是,某些引擎,如Innodb,自增值是存在内存里的而不是磁盘中,每次在数据库启动时,会找到自增列最大值,存在内存备用。问题来了,如果刚创建的一张表,并没有插入数据,但是数据库在此时重启了。那Mysql在找最大值时,是找不到我们设置的初始值的,那么又从1开始了。解决这个问题的办法,可以用创建表后插入一条脏数据来解决。)
PRIMARY KEY(列名)指出了哪个列为主键,指定单个列时,列的值必须唯一;指定多个列时,列的值的组合必须唯一。
NOT NULL指定这一列不能为空。NULL为默认的选择,即没有指定时,列的值可以为空。
DEFAULT指定某列的默认值,既没有指定值时的自动填充内容。
五、更新表 ALTER TABLE
eg: ALTER TABLE student ADD sex CHAR(1);
eg: ALTER TABLE student DROP COLUMN sex;
eg: ALTER TABLE schoolADD CONSTRAINT stu_sch FOREIGN KEY (sid) REFRENCES student(sid);
六、删除表 DROP TABLE
eg:DROP TABLE student;
七、重命名表 RENAME TALBE
eg:RENAME TABLE student TO students;