⑴ sql语句怎么查询表的主键
1、打开【SQL Server Management Studio】管理工具,连接数据库。
⑵ mysql 插入数据后返回主键
你可以看看这里,大致有三种办法:
#方法一是使用last_insert_id
SELECTLAST_INSERT_ID();
#方法二是使用max(id),但是不适用高并发环境下。
方法三是创建一个存储过程,在存储过程中调用先插入再获取最大值的操作
#方法四使用@@identity
select@@IDENTITY
#基本MySQL的学习,可以学习这里。使用MariaDB数据库管理系统。linuxprobe.com/chapter-18.html
#出处:
⑶ 常见的几个数据库insert into操作的主键返回值
插入一条记录时,我们很多时候都想马当前插入的主键返回出来.作为另一个操作的条件.如果主键是
自动生成的(大多数时候是这样),那么取回主键是一种比较困难的事.可能对于一些特殊的数据库必须把
insert into和select max(key)或什么序列当前值作为一个事务的原子来操作,但很多数据库(以及数据库操作环境)
并不能为你提供事务并发控制.所以如果多人同时操作,那么select max(key)很可能就不是你刚才insert的
那条记录.
在JDBC3.0中,已经可以直接返回insert 语句的主KEY和其它值,但目前只有mysql支持.oracl和sqlserver
的JDBC都不支持这个特性.而且如果离开JAVA平台就没有这个特性了.
详细读了oacle,sqlserver,mysql的文档,对上面三种数据库找到了以下解决方案,在java和非java平台都适用:
SQLServer:
INSERT INTO tableName (fieldList ...) values (valueList ...) SELECT @@IDENTITY AS aliasName;
这一句相当于执行查询操作,从结果集中getXXX(aliasName);就可以获取.
Oracle:
INSERT INTO tableName (fieldList ...) values (valueList ...) RETURNING [primaryKey INTO]:aliasName;
同上的方法可以获取.这两种方法都是数据库支持的sql语句,原以根本不存在并发冲突.
mysql:
没有找到可以绝对保证原子性的语句(谁知道反馈一下)
如果是在JAVA平台,可以直接利用 Statement的返回键特性.比较安全,在非java平台上,目前只能通过在同一会话中用
LAST_INSERT_ID([columnName])来获取,注意一定要在同一会话中.
⑷ 搜集SQL常用的操作语句
结构化查询语言(Structured Query Language)简称SQL(发音:/ˈes kjuː ˈel/ "S-Q-L"),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
一、插入(复制)表数据
1、INSERT INTO 语句:
(1)插入新的一行数
[sql] view plain ;
INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing');
(2)在指定的列中插入数据
[sql] view plain ;
INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees');
2、SQL SELECT INTO 语句可用于创建表的备份复件
(1)在建表时复制所有数据
[sql] view plain ;
create table userinfo_new as select * from userinfo;
(2)在建表时复制部分数据
[sql] view plain ;
create table userinfo_new1 as select id,username from userinfo;
(3)在添加时复制所有数据
[sql] view plain ;
insert into userinfo_new select * from userinfo;
(4)在添加时复制部分数据
[sql] view plain ;
insert into userinfo_new(id,username) select id,username from userinfo;
二、修改表数据
Update 语句
(1)无条件更新
[sql] view plain ;
update userinfo set userpwd='111',email='[email protected]';
(2)有条件更新
[sql] view plain ;
update userinfo set userpwd='123456' where username='xxx';
三、删除表数据
1、DELETE 语句
(1)无条件删除
[sql]view plain;
daletefromuserinfo;
(2)有条件删除
[sql]view plain;
='yyy';
四、查询表数据
1、SELECT 语句:
(1)查询所有字段
[sql] view plain ;
select * from users;
(2)查询指定字段
[sql] view plain ;
select username,salary from users;
2、SELECT DISTINCT 语句
从 Company" 列中仅选取唯一不同的值,需要使用 SELECT DISTINCT 语句:
[sql] view plain ;
SELECT DISTINCT Company FROM Orders;
⑸ PHP+Mysql如何取出存进数组对应主键那一行的数据
将数组序列化存储,例如
$stooges = array('Moe','Larry','Curly');
$new = serialize($stooges);
print_r($new);echo "<br />";
print_r(unserialize($new));
结果:a:3:{i:0;s:3:"Moe";i:1;s:5:"Larry";i:2;s:5:"Curly";}
Array ( [0] => Moe [1] => Larry [2] => Curly )
把$new写进数据库就行啦
⑹ es导入数据,数据变少
分析
现在导致数据被删除的情况应该是a表和b表的主键id重复,es默认mysql中的 id 为主键 并且document 的_id 和id保持一致, 导致a表中的数据被删除掉了(替换掉了)
三、解决方案
新建一个字段保存数据库的id 主键数据, 查询的时候使用uuid作为id的数据
注意
es2.0以后就不支持修改_id映射为其他字段了,es也不支持联合主键之类的。
⑺ SQL中的每一张表都必须设有主键吗
SQL中不是必须设置主键。
主关键字(primary key)的意思是表中的一个或多个字段,它的值用于唯一地标识表中的某一条记录。
在两个表的关系中,主关键字用来在一个表中引用来自于另一个表中的特定记录,主关键字是一种唯一关键字,表定义的一部分。
一个表不能有多个主关键字,并且主关键字的列不能包含空值。主关键字是可选的,并且可在 CREATE TABLE 或 ALTER TABLE 语句中定义。主键只是说对一种表和表关系的关联而已,还有就是在建主键的时候会自动内添加个索引,某些情况下可以增加查询速度容,如果只是简单的对单表操作的话,没有必要去设置主键。
(7)essql返回主键扩展阅读:
结构化查询语言(Structured Query Language)简称SQL(发音:/ˈes kjuː ˈel/ "S-Q-L"),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。
⑻ 如何获取数据库当前的主键字段
查询数据库利用上边的要领数据库如何设置主键可以由记载生成对象,但是你仍然得用SQL语句来查询数据库,这需要对数据库布局有深切的相识这还是没有解决问题,虽则我们能够不佣人的劳力地般配数据库表和类的名儿,但是还是必需手工编写SQL语句这就是说每一次修改数据库布局后,将不得不手工编辑这些查询语句不外,我们仍然可以利用前文所述的要领来越过这个障碍通常而言,查询关系数据库时,你将会用到属于主键或索引的字段名和值一言弊之,如果或人向你供给了适当的字段名和字段值
,你就可以从响应的数据库中抽取符合要求的记载(或字段)而DatabaseMetaData对象不单可以被用于检索一系列的表名(见上所述数据库主键是啥子),并且可以获得一系列的主键及索引字段上边的问题由此可以迎刃而解
通过填入一系列适当的(字段名,字段值)对,可以利用相对于而言少得多的代码使成为事实对关系数据库的查询你可以将对子中的所有字段名和数据库中的主健及索引字段相般配每一当你找到了名儿列表中响应的主健或索引字段,可以根据响应的数值来生成一个SQL语句,执行它来获取RecordSet,并通过Class.forName()构造机
制将结果转化为对象使成为事实这一设法要求可以以(名,值)对的方式对与数据库表相干的每个类的数据元素进行存取但是这类要领只有通过上节所述的通用父类才能趋于完美清单3和4利用伪码表示数据库主键是啥子了这一要领
Openthedatabaseconnection
foreachtable
{
if(itisavailabe)
{
loadtheclassfile
你好stable
}
elsethrowanexception
}
· 清单3:初始化数据库毗连的伪码
(name,value)pairs
foreachtableT
{
foreach(name,value)pair
{
if(namematchesprimary_key_fieldorindex_field)
}
ifallkey_fieldswerefound
elseifallindex_fieldswerefound
ForeachrecordintheResultSet
{
''''scontents
Addtheobjecttotheresults,eg,attac你好ttoA
}
}
· 清单4:描写数据库查询的伪码
Java镜像和JavabeansJava1.1研发套件(JDK)的引入,为我们带来了很多壮大的新性能,例如全新的用户界面接口类有两个新的JDKAPI尤其值当注重:镜像机制(java.lang.reflect包)和JavaBeans组件的应用程序接口(java.beans包)这两个API将会帮助我们创立高明的数据库类,使我们可以利用有关类的meta-信息,以此来解决研发通用数据库类中的问题
领有forName()和newInstance()要领的Class类,仅只是镜象(reflection)功效的一个简略例子真正重要的是,forName()字符串参数不必需是源程序中出现的字符串只要给出一个名儿(这个名儿可从任何地方取来),你就可以载入并实例化任何一个类对于我们的数据库类数据库如何设置主键,我们可以直接从数据库自身的表名中得到类名这就是说,与数据库表相干的Java类名其实不需要出现在源程序中响应地,当表名改变或某个表被加入到数据库中时,不需要修改源码,只要确信带有新名儿的类已存在你的体系中
镜像类象征着可以在及时运行中获取、储存和处置惩罚Java程序中的类信息它们的实例能够象任何Java对象同样被运用,你可以象修改字符串和整儿同样,去修改类、数据类型、返回类型、要领参照和参数在源程序级,这个镜像的观点看起来并无啥子价值——因为可以应用你自己的编码直接存取你所需要的有关类、要领及参数的所有信息但是,镜像(reflection)将数据库修改主键会在java的编译文件中发挥作用JavaBeanSAPI的作用是:通过应用程序的构造机制利用来自于全然不同的研发者或产商所编写的类
JavaBeans规范为类成员的名儿制定一系列的条例以确保要领函数的名儿能体系地描写它们的功效任何一个符正当则的Java类均可以被一个Bean的内化实例(通过镜像)查抄,以展现其举动的重要特征——诸如对于啥子样的事件类将有所响应,和该类将会孕育发生啥子样的事件等等任何符合这些规范的类都是高效的Bean,因而是一个组件有理论上,这象征着你可以从各类来历网络一系列beans,当需要它们时可以将其其及时地绑在一路一个Bean的例子
在底下一个名为Translation的Bean中数据库主键生成计谋,有一个构造函数和两个要领来操作一个名为“language”的属性这里我想夸大的是,既然你可以通过查抄一个类的代码来相识它的构造函数、要领及属性,那么Bean的内化器(Introspector)也能做到
{
intlanguage;
publictranslation()
{
}
publicintgetlanguage()
{
return(language);
}
publicvoidsetLanguage(intlanguage)
{
t你好slanguage=language;
}
}
⑼ 想返回主键值,但sql语句一直报错,不知道为什么,是在MySql环境使用的,求大神帮助!
MySql环境, 获取最新创建的 主键值.
不是使用 select @@identity 呀.
这个 select @@identity, 是 SQL Server 数据库用的。
mysql 是使用另外一个函数, 下面是例子:
mysql> CREATE TABLE test_create_tab2 (
-> id INT AUTO_INCREMENT,
-> val VARCHAR(10),
-> PRIMARY KEY (id)
-> );
Query OK, 0 rows affected (0.09 sec)
mysql> INSERT INTO test_create_tab2(val) VALUES ('NO id');
Query OK, 1 row affected (0.03 sec)
mysql> select last_insert_id() as id;
+----+
| id |
+----+
| 1 |
+----+
1 row in set (0.00 sec)
mysql> INSERT INTO test_create_tab2(val) VALUES ('NO id 2');
Query OK, 1 row affected (0.03 sec)
mysql> select last_insert_id() as id;
+----+
| id |
+----+
| 2 |
+----+
1 row in set (0.00 sec)
mysql> select * from test_create_tab2;
+----+---------+
| id | val |
+----+---------+
| 1 | NO id |
| 2 | NO id 2 |
+----+---------+
2 rows in set (0.00 sec)
⑽ 如何修改表 比如增加外码约束,增加check yues,等等
如果是用企业管理器
鼠标右键点你的表,然后点设计表
再在你插入的字段的空白处右键点,会有check约束,主外键,关系
如果用查询分析器
--添加主键约束(stuNo作为主键,stuInfo为表名)
alter table stuInfo
add constraint PK_stuNo PRIMARY KEY (stuNo)
--添加唯一约束
alter table stuInfo
add constraint UQ_stuID UNIQUE (stuID)
--添加默认约束(地址不填,默认为地址不详)
alter table stuInfo
add constraint DF_stuAddress DEFAULT ('地址不详') FOR stuAddress
--添加检查约束 要求年龄在15-40岁之间
alter table stuInfo
add constraint CK_stuAge CHECK(stuAge BETWEEN 15 AND 40)
添加外键约束 (表名stuMarks stuInfo)
alter table stuMarks
add constraint FK_stuNo FOREIGN KEY(stuNo) REFERENCES stuInfo(stuNo)